4

对于我的作业,我必须从输入文件中读取数据并将其存储在一个二维数组中,然后将该数组传递给另一个函数。这是我到目前为止所尝试的,但我不知道当我在 main 中调用这个函数时它会给出错误:

访问冲突写入位置 0x00000000。

我试图动态分配内存,它给出了同样的错误。我做错了什么?

最后更新代码:

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

int *a[2];
void getData(void)
{
    FILE *fp = fopen("input.txt", "r");
    int number;

    fscanf(fp, "%d", &number);


    for (int i = 0; i < number; i++)
    {
        a[i]=(int*)malloc(number * sizeof (int));
        fscanf(fp, "%d %d", &a[i][0], &a[i][1]);
    }
    fclose(fp);
}


int main()
{   
    getData();
    for(int i=0;i<8;i++)
    {
        printf("%d %d\n",a[i][0],a[i][1]);
    }
}
4

2 回答 2

5

您需要为a

在 for 循环之前

a = (int **)malloc(number * sizeof(int *))
于 2012-11-11T17:36:18.920 回答
1

您没有分配第一个维度,即当您尝试取消引用时 a 是一个空指针。

#include <stdlib.h>
a = malloc(number * sizeof *a);

顺便说一句,sizeof(int)不足以存储两个数字。

#include <stdlib.h>
a[i] = malloc(2 * sizeof *a[i]); 
fscanf(iFile, "%d %d", &a[i][0], &a[i][1]);

这是一个完整的正确代码(虽然不完美,只要a是一个非常大的全局变量):

int (*a)[2] = NULL;

void getData(void)
{
    FILE *fp = fopen("input.txt", "r");
    int number;

    fscanf(fp, "%d", &number);
    a = malloc(number * sizeof *a);

    for (int i = 0; i < number; i++)
        fscanf(fp, "%d %d", &a[i][0], &a[i][1]);

    fclose(fp);
}
于 2012-11-11T17:36:36.123 回答