2012-11-11 2 views
4

Для моей домашней работы я должен прочитать данные из входного файла и сохранить его в двумерном массиве, а затем передать этот массив другой функции. Это то, что я пытался до сих пор, но я не знаю, когда я называю эту функцию в основном она дает ошибку:двухмерная матрица как возвращаемое значение

Access violation writing location 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]); 
    } 
} 

ответ

5

Вам нужно выделить память для a

Перед тем как цикл

a = (int **)malloc(number * sizeof(int *)) 
+0

Cast бесполезно. – md5

+0

@ Кириленко - Да, это бесполезно в C. Но так как у него подобный актерский состав в его исходном коде, я думал, что он компилируется на C++. – user93353

1

Вы не выделяя первое измерение, т.е. является нулевым указателем, когда вы пытаетесь разыменовать его.

#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 является hugly глобальной переменной):

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); 
} 
+0

он все еще не работает, и он дает ту же ошибку. Мэйб, это что-то не так в моей функции. – laura

+0

Я протестировал его, он работает, как я ожидаю. Какой у вас чековый код? – md5

+0

a = malloc (number * sizeof * a) -> значение типа «void *» не может быть назначено сущности типа «int (*) [2]» -> это первая ошибка – laura

Смежные вопросы