指针浮动数组的第一次机会异常

时间:2014-02-04 03:47:58

标签: c++ c pointers

    int main(int argc, char** argv)
{
    printf("Enter the file name:\n");
    char inputFileLoc[100], outFileLoc[100];
    scanf("%s", inputFileLoc);
    int * n = 0;
    float rcoef[2];
    FILE * inFile = fopen("D:\\test.txt", "r");
    FILE * outFile = fopen(outFileLoc, "w");
    if (inFile == NULL)
    {
        printf("File not found at %s", inputFileLoc);
    }
    else
    {

        printf("How many data points should we read in?");
        scanf("%i", &n);
        float *xdata = (float *)calloc(sizeof(float), *n);
        float *ydata = (float *)calloc(sizeof(float), *n); 
        for (int i = 0; i < *n; i++)
        {
            fscanf(inFile, "%f%f", &xdata[i], &ydata[i]);
        }
        fregression(xdata, ydata, rcoef);
        printf("Where would you like to save the file to?\n");
        scanf("%s", outFileLoc);
        fprintf(outFile, "The slope and intercept are %f and %f", rcoef[0], rcoef[1]);
        free(xdata);
        free(ydata);
    }
    fclose(inFile);
    fclose(outFile);
    return 0;
}

我在“float * xdata =(float *).....行中出错了,我不明白为什么?我错过了某种异常处理程序,因为这是我唯一能想到的的。

2 个答案:

答案 0 :(得分:0)

这是不正确的:

int * n = 0;

应改为

int n = 0;

scanf应该获取要写入的地址而不是指针的地址。即使您想使用指针,也应该分配内存,n应该指向它。在这种情况下,您应该在转到&时将n放到scanf,即scanf("%i", n);应该没问题。

答案 1 :(得分:0)

  1. int * n 更改为 int n ,因为scanf正在尝试写入未初始化的内存。

  2. 在calloc中也会进行更改,因为它试图从未正确定义的* n进行分配

  3. 当我尝试两次更改时,它工作正常。即使你在完全指定之后出现错误。