void fill_garage(Car** garage, char* cars, int* size)
43 {
44 int i;
45 FILE* file=fopen(cars,"r");
46 fscanf(file,"%d",size);
47 *garage=malloc(sizeof(Car)**size);
48 printf("%d",*size);
49 for(i=0;i<*size;i++)
50 {
51 (*garage)[i].make=malloc(sizeof(char)*MAX_STRING_LEN);
52 (*garage)[i].model=malloc(sizeof(char)*MAX_STRING_LEN);
53 fscanf(file,"%d%s%s%d",(*garage)[i].year,(*garage)[i].make,(*garage)[i].model,(*garage)[i].miles);
54 }
55 fclose(file);
56 }
我在这段代码上遇到了分段错误,gdb返回车库[i] - &gt; make line就是这个原因,但我无法弄清楚为什么这条线会出现seg故障。
答案 0 :(得分:1)
fscanf
格式的 %d
需要指针到int
作为参数。您显然试图传递int
本身而不是指针
fscanf(file,"%d%s%s%d",
&(*garage)[i].year,
(*garage)[i].make,
(*garage)[i].model,
&(*garage)[i].miles);
请注意&
运算符在fscanf
。
答案 1 :(得分:0)
使用garage[i]->
时出错了。您应该使用(*garage)[i].
代替。使用garage[i]
,您不会遍历已分配的数组,而是直接接近garage
指针的内存,然后尝试写入它,这很可能导致段错误。
现在您已更改代码以传递值而不是指向fscanf
的指针。您应该使用&(*garage)[i].year
和&(*garage)[i].miles
。