2012-11-11 95 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

分配內存,然後在for循環

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

演員是沒用的。 – md5

+0

@Kirilenko - 是的,它在C中沒用。但是由於他在原代碼中有相似的表演,我想可能是他正在用C++編譯。 – user93353

1

您還沒有分配第一個維度,即當您試圖對其進行解引用時,它是空指針。

#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是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

它仍然無法正常工作,並且會出現相同的錯誤。 Maibe在我的功能中有點不對勁。 – laura

+0

我測試過了,它的工作正如我所期望的那樣。你的支票代碼是什麼? – md5

+0

a = malloc(number * sizeof * a) - >類型爲「void *」的值不能分配給類型爲「int(*)[2]」的實體 - >這是第一個錯誤 – laura