Bel*_*rog 1 c file segmentation-fault
我显然遗漏了一些东西.有人可以解释为什么会这样吗?
#define RANDOM_DEVICE "/dev/random"
int create_shared_secret(char * secret,int size)
{
FILE * file=NULL;
int RetVal;
file=fopen(RANDOM_DEVICE,"r");
if(!file)
{
printf("Unable to open random device %s\n",RANDOM_DEVICE);
exit(-1);
}
RetVal=fread(&secret,1,size,file);
if(RetVal!=size)
{
printf("Problem getting seed value\n");
exit(-1);
}
if(file) fclose(file); //segfault right here
return 0;
}
Run Code Online (Sandbox Code Playgroud)
你正在粉碎你的堆栈,在读取'secret'变量时用一些borked覆盖文件变量.'secret'已经是一个指针,所以它不需要'&'运算符.
预言行应该读
RetVal=fread(secret,1,size,file);
Run Code Online (Sandbox Code Playgroud)
你正在做的是基本上将一个新的指针值读入秘密(而不是秘密所指向的内存),并且阅读方式过多,溢出到你的其他变量中.如果你在这个函数中使用了秘密,它也会被分段(如果你运气不好,希望,或者在程序的其他部分造成随机损坏).
HTH.