运行程序时出现分段错误(核心转储)

时间:2019-01-03 03:17:28

标签: c

pos.dat文件包含:

1 2 4
1 2 3
1 2 1
1 2 3

我在运行程序时得到segmentation fault

#include <stdio.h>
#include <stdlib.h>

int main() {
    FILE  *fp;
    int line = 4, i = 1;
    float *x, *y, *z;
    fp = fopen("pos.dat", "r");
    while (i <= line) {
        fscanf(fp, "%f%f%f", &*x, &*y, &*z);
        printf(fp, "%f\t%f\t%f\n", *x, *y, *z);
        i = i + 1;
    }
    return 0;
}

1 个答案:

答案 0 :(得分:6)

float *x;声明一个float指针。然后,当您尝试使用它时,scanf()将尝试取消对指针的引用,而无需先使用有效地址对其进行初始化。

您要做的是声明float,而不是float指针:

float x, y, z;
...
fscanf(fp,"%f%f%f", &x, &y, &z);
...
printf("%f\t%f\t%f\n", x, y, z);