涉及未使用变量的分段错误

时间:2017-07-19 12:56:12

标签: c segmentation-fault

所以我面临一个奇怪的问题。声明未随后使用的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之后,我仍然会遇到分段错误。

2 个答案:

答案 0 :(得分:5)

  在printf之后我仍然得到了seg。故障。

嗯,段错误可能是由原因A引起的,只是在一段时间后才被捕获。

这一行:fscanf(ptr, "%s", a)正在将字符串读入a而不先分配内存 - > UB。

仅在printf调用UB。使用aa=malloc(SOME_SIZE)修复char a[SOME_SIZE],这应该会消失

答案 1 :(得分:1)

您需要使用char *acalloc函数初始化指向char malloc的指针。或者,使用具有自动存储持续时间的数组,如char a[20];

在您的代码中,您将未初始化的指针传递给fscanf(),这意味着fscanf()将覆盖未定义的内存区域