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()
方法中使用它。您可以通过两种方式执行此操作:
- 静态 -
char model[1024];
- 动态 -
char * model = (char*) malloc(1024);
完成后,不要忘记使用free()
来释放缓冲区。