2010-10-26 4 views
1

Si j'ai une structure telle quemémoire Allouer aux structures de pointeur à l'intérieur des structures

typedef struct _people { 
char *name; 

bool *exists; 

struct _people **citizens; 
} PEOPLE; 

Comment puis-je faire pour l'allocation de mémoire pour que personnes-> citoyens [0] -> nom est accessible? J'ai essayé

info->citizens = malloc(sizeof(PEOPLE *)*numbPeople); 

Cependant, lorsque je tente d'accéder info-> citoyens-> nom que je reçois le message d'erreur dans GDB:

Program received signal EXC_BAD_ACCESS, Could not access memory. 
Reason: KERN_INVALID_ADDRESS at address: 0x0000000000000008 

Répondre

4

(Je n'aime structs typedefing en C sans raison)

Laissez sizeof faire le travail pour vous.

info->citizens = malloc(numbPeople * sizeof *info->citizens) 
if (!info->citizens) { /* could not malloc - do something */ } 

int i; 
for (i = 0; i < numbPeople; ++i) { 
    info->citizens[i] = malloc(sizeof *info->citizens[i]); 
    if (!info->citizens[i]) { /* could not malloc - do something */ } 
}