2012-11-11 1 views
4

Pour mes devoirs, je dois lire les données d'un fichier d'entrée et les stocker dans un tableau à deux dimensions, puis passer ce tableau à une autre fonction. Voilà ce que je l'ai essayé jusqu'à présent, mais je ne sais pas quand je l'appelle cette fonction principale, il donne l'erreur:tableau à deux dimensions comme valeur de retour

Access violation writing location 0x00000000.

J'ai essayé d'allouer dynamiquement la mémoire et lui donne la même erreur. Qu'est ce que je fais mal?

La dernière mise à jour du code:

#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]); 
    } 
} 

Répondre

5

Vous devez allouer de la mémoire pour a

Avant la boucle

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

Cast est inutile. – md5

+0

@Kirilenko - Oui, c'est inutile en C. Mais comme il a une distribution similaire dans son code d'origine, je pensais qu'il était en train de compiler en C++. – user93353

1

Vous n'êtes pas allouez la première dimension, à savoir une est un pointeur nul lorsque vous essayez de le déréférencer.

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

BTW, sizeof(int) n'est pas suffisant pour stocker deux nombres.

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

Voici un tout code correct (mais pas parfait, aussi longtemps que a est une variable globale 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

ça ne marche toujours pas et ça donne la même erreur. Maibe c'est autre chose qui ne va pas dans ma fonction. – laura

+0

Je l'ai testé, ça fonctionne comme je l'espère. Quel est votre code de vérification? – md5

+0

a = malloc (nombre * sizeof * a) -> une valeur de type "void *" ne peut pas être affectée à une entité de type "int (*) [2]" -> ceci est la première erreur – laura

Questions connexes