2013-03-11 7 views
0

Je reçois une erreur de segmentation pour une raison quelconque. Je ne sais pas pourquoi. De l'aide?Erreur de segmentation inexplicable

typedef struct gw_struct{ 
    int pop; 
    int col; 
    int row; 
    struct district ***gw; 
    struct person **people; 
}; 

typedef struct gw_struct *GW; 

, puis plus tard dans une fonction ...

GW world; 
struct district ***array = malloc(nrows*sizeof(struct district**)); 
    int i, j; 
for (i = 0; i < nrows; i++) 
{ 
    array[i] = malloc(ncols*sizeof(struct district*)); 
    for (j = 0; j<ncols; j++) 
    { 
      array[i][j] = malloc(sizeof(struct district)); 
    } 
} 

world->gw = array; //this is the line that gives the seg fault 
+2

avez-vous intialisé le monde du pointeur ???? – 999k

Répondre

2

Votre code n'initialize world, on peut donc supposer qu'il pointe au loin dans l'endroit des mauvaises herbes lorsque vous essayez de déréférencer dans cette ligne. Assurez-vous d'initialiser les variables avant de les utiliser.

+0

J'ai changé l'initialisation et ça ne marche toujours pas. – SwiftCore

+0

Que se passe-t-il maintenant? –

+0

Seg faute au même endroit ... – SwiftCore

-1

Votre problème est sur la première ligne GW world;, ce n'est pas référencé correctement dans la mémoire.

Cela devrait fonctionner:

GW *world; 
struct district ***array = malloc(nrows*sizeof(struct district**)); 
    int i, j; 
for (i = 0; i < nrows; i++) 
{ 
    array[i] = malloc(ncols*sizeof(struct district*)); 
    for (j = 0; j<ncols; j++) 
    { 
      array[i][j] = malloc(sizeof(struct district)); 
    } 
} 

world->gw = array; //this is the line that gives the seg fault 

Votre déclaration de variable mondiale doit être un pointeur, cela référence correctement votre struct initialisé en mémoire et vous permettra de faire votre devoir.

+0

S'il vous plaît ajouter quelques détails que, pourquoi vous avez posté ce code, et comment il aidera à résoudre le problème. – Hamad