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 in __svfscanf_l()
这会导致什么?我查看了gdb中的* fp。在读取totalRun _offset = 0之前和读取_offset = 4096之后.totalRun的内容是正确的(“3”)。我只读了一行,为什么偏移4096?还有什么是_blksize在文件中引用。
谢谢
答案 0 :(得分:2)
你需要为model
分配内存,它是一个未初始化的指针。同时确保fscanf()
不会超出分配给model
的数组。如果model
不需要通过动态分配,那么只需使用本地数组。例如:
char model[1024];
if (1 == fscanf(fp, "%1023s", model))
{
}
始终检查fscanf()
的返回值,该值返回成功分配的数量,否则如果对fscanf()
的调用失败,程序将处理未初始化的变量。< / p>
答案 1 :(得分:1)
变量model
未初始化。必须先为其分配内存,然后才能在fscanf()
方法中使用它。你可以用两种方式做到:
char model[1024];
char * model = (char*) malloc(1024);
完成后,不要忘记使用free()
取消分配缓冲区。