所以我面临一个奇怪的问题。声明未随后使用的int
时,会出现分段错误。当我删除声明时,代码运行完美。怎么会这样?
FILE* ptr = fopen("prueba.txt", "r");
int x;
char* a;
int y = 0; //this cause the seg fault.
do{
while (fscanf(ptr, "%i", &x)!=-1){
fscanf(ptr, "%s", a);
printf("%i %s ",x, a);
}
fseek(ptr, 0, SEEK_SET);
}while(1);
fclose(ptr);
}
但即使我使用它,也就是y++;
,printf
之后,我仍然会遇到分段错误。
答案 0 :(得分:5)
在printf之后我仍然得到了seg。故障。
嗯,段错误可能是由原因A引起的,只是在一段时间后才被捕获。
这一行:fscanf(ptr, "%s", a)
正在将字符串读入a
而不先分配内存 - > UB。
仅在printf
调用UB。使用a
或a=malloc(SOME_SIZE)
修复char a[SOME_SIZE]
,这应该会消失
答案 1 :(得分:1)
您需要使用char *a
或calloc
函数初始化指向char malloc
的指针。或者,使用具有自动存储持续时间的数组,如char a[20];
。
在您的代码中,您将未初始化的指针传递给fscanf()
,这意味着fscanf()
将覆盖未定义的内存区域。