对于我的作业,我必须从输入文件中读取数据并将其存储在双维数组中,然后将此数组传递给另一个函数。这是我到目前为止所尝试的,但我不知道当我在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]);
}
}
答案 0 :(得分:5)
您需要为a
在for循环之前
a = (int **)malloc(number * sizeof(int *))
答案 1 :(得分:1)
您没有分配第一个维度,即当您尝试取消引用它时,a是一个空指针。
#include <stdlib.h>
a = malloc(number * sizeof *a);
BTW,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);
}