2012-05-21 5 views
0

Je suis fondamentalement en train de créer un tableau de pointeurs struct. Chacun de ces pointeurs est supposé pointer vers un autre élément du même tableau de structure, c'est-à-dire BLOCKS [2].tableau de pointeurs struct

C'est ce que j'ai fait jusqu'ici.

typedef struct bb { 
     .. 
     .. 
     .. 
    struct bb **successor; 
} BLOCK; 

BLOCK BLOCKS[10]; 

struct bb **A = malloc(sizeof(struct bb*)*5);  //create an array of pointers of type struct bb, 5 units i.e A[0]->A[4]. 

BLOCKS[0].successors = A       //just assigning 

Maintenant ...... comment affecter le premier élément du tableau de pointeurs, A, à une autre structure?

J'ai essayé:

A[0] = &BLOCKS[6]; 

Il compile bien, mais je reçois une faute de SEG.

+2

Avez-vous essayé d'exécuter le programme dans un débogueur? –

+1

D'où vient le défaut? – hmjd

+0

Il segmente les erreurs à "A [0] = & BLOCKS [6];". – maxflow

Répondre

1

Avez-vous essayé celui-ci:

typedef struct bb { 
     .. 
     .. 
     .. 
    struct bb *successor; 
} BLOCK; 

BLOCK BLOCKS[10]; 

struct bb *A = malloc(sizeof(struct bb)*5);  //create an array of pointers of 
type struct bb, 5 units i.e A[0]->A[4]. 

BLOCKS[0].successors = A[0]; 

Parce que après avoir regardé, je pense rapidement le ** devrait rendre en * et votre malloc est de réserver la mémoire non pour la taille de 5 structures mais la taille 5 pointeurs sur cette structure.

0

Citation Question: "Je suis fondamentalement d'essayer de créer un tableau de pointeurs struct."

Le tableau de pointeur de structure doit être

BLOCK *ptrBlockArr[10]; //This an array of size 10, which can store 10 pointers to the structure BLOCK 

Maintenant, depuis, ces sont des pointeurs, vous aurez alloué de la mémoire pour chacun des éléments. Cela devrait être fait comme

for(int i=0; i<10; i++) 
{ 
    ptrBlockArr[i] = (BLOCK *)malloc(sizeof(BLOCK)); 
} 

question vous avez également inclus: « Chacun de ces pointeurs est censé pointer vers un autre élément du même tableau de la structure ». Cela peut se faire comme

for(int i=0; i<9; i++) // Run the loop till the last but one element 
{ 
    ptrBlockArr[i]->successor = ptrBlockArr[i+1]; 
} 
//Assign the last's element's sucessor as the first element. This will make it circular. Check if this is your intention 
ptrBlockArr[9]->successor = ptrBlockArr[0] 

S'il vous plaît noter que dans votre structure successor est struct bb**, alors qu'il devrait être struct bb*.

En outre, vous pouvez optimiser le code pour combiner les deux boucles indiquées ci-dessus en une seule boucle. Je vais vous laisser cela pour apprendre par vous-même et mettre en œuvre.

+0

désolé mais cela ne suit pas la structure de mon code. J'essaye de créer un tableau de pointeurs de structure qui est également un membre de chaque structure. – maxflow