为什么在fclose上出现段错误?

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)

fal*_*tro 9

你正在粉碎你的堆栈,在读取'secret'变量时用一些borked覆盖文件变量.'secret'已经是一个指针,所以它不需要'&'运算符.

预言行应该读

RetVal=fread(secret,1,size,file);
Run Code Online (Sandbox Code Playgroud)

你正在做的是基本上将一个新的指针值读入秘密(而不是秘密所指向的内存),并且阅读方式过多,溢出到你的其他变量中.如果你在这个函数中使用了秘密,它也会被分段(如果你运气不好,希望,或者在程序的其他部分造成随机损坏).

HTH.