簡體   English   中英

fscanf()seg fault程序接收信號EXC_BAD_ACCESS

[英]fscanf() seg fault Program received signal 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 in __svfscanf_l()

什么能導致這個? 我查看了gdb中的* fp。 在讀取totalRun _offset = 0之前和讀取_offset = 4096之后.totalRun的內容是正確的(“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()來釋放緩沖區。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM