fscanf导致段错误

时间:2016-02-16 18:15:20

标签: c pointers segmentation-fault scanf

我试图从.txt文件中读取一堆int并将它们存储在内存中。但是,只要我尝试运行它,下面代码中的fscanf()行就会导致分段错误。我确认`fopen()工作正常。知道我应该怎么做吗?谢谢你的帮助。

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




void load_file(FILE* file, int** p);

int main()
{

    FILE* f1;
    f1 = fopen("twenty-five-ints.txt", "r");
    int p=0;
    int* k = &p;
    load_file(f1, &k);
    return 0;
}

void load_file(FILE* file, int** p) {

    int number = 0;
    int i = 0;
    while (fscanf(file, "%d", &number) != EOF) {
        *(*p + i) = (int) fscanf(file, "%d", &number);
        i++;
    }

}

3 个答案:

答案 0 :(得分:2)

在您的代码中,var post_id = res.posts.data(id); 指向指向单个整数的指针。您只有足够的空间来存储单个整数,尝试存储第二个或第三个整数可能会导致您观察到的崩溃。

答案 1 :(得分:1)

问题在于

*(*p + i) = (int) fscanf(file, "%d", &number);

您已经传递了单个int的地址,并且您在指针上预先执行了算术操作,使其超出了可访问的内存。访问该内存会调用undefined behavior

分段错误是UB的副作用之一。

那就是说,FWIW,没有理由将fsacnf()的返回值转换为int

答案 2 :(得分:0)

将p分配为大小为25的数组,并将每个元素初始化为零。

那应该解决问题