C - fscanf() seg 故障 程序接收信号EXC_BAD_ACCESS


 16     char* input = (char*) argv[1];
 17     FILE *fp = fopen (input, "r");
 18     if( fp == NULL)
 19     {
 20         printf(" reading input file failed");
 21         return 0;
 22     }
 23     fseek(fp,0,SEEK_END);
 24     int file_size = ftell(fp);
 29     rewind(fp);
 30     int i;
 31     int totalRun;
 32     char * temp;
 33     char* model;
 34     char* example;
 36     fscanf(fp,"%d",&totalRun);
 37     fscanf(fp,"%s",model);

上面是我的代码,我在第 37 行收到此错误"fscanf(fp,"%s".model)"

程序收到信号EXC_BAD_ACCESS,无法访问内存。原因:KERN_PROTECTION_FAILURE地址:0x00007fff5fc00730 0x00007fff8db20bcb__svfscanf_l ()

什么会导致这种情况??我在gdb中研究了*fp。读取 total之前运行 _offset = 0,读取后运行 _offset = 4096。总运行的内容是正确的("3")。我只读了一行,为什么偏移量是 4096?还有_blksize在文件中指的是什么。

谢谢

你需要为model分配内存,它是一个未初始化的指针。还要确保fscanf()读取的读数不会超出分配给 model 的数组。如果model不需要动态分配,则只需使用本地数组。例如:

char model[1024];
if (1 == fscanf(fp, "%1023s", model))
{
}

始终检查 fscanf() 的返回值,该值返回成功赋值的数量,否则如果调用 fscanf() 失败,程序将处理未初始化的变量。

变量model未启动。必须先为其分配内存,然后才能在 fscanf() 方法中使用它。您可以通过两种方式执行此操作:

  1. 静态 - char model[1024];
  2. 动态 - char * model = (char*) malloc(1024); 完成后,不要忘记使用 free() 来释放缓冲区。

相关内容

  • 没有找到相关文章

最新更新