Выделение памяти указательным структурам внутри структур - PullRequest
1 голос
/ 26 октября 2010

Если у меня есть структура, такая как

typedef struct _people {
 char *name;

 bool *exists;

 struct _people **citizens;
} PEOPLE;

Как мне выделить память, чтобы люди-> граждане [0] -> имя были доступны? Я пробовал

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

Однако, когда я пытаюсь получить доступ к информации-> граждан-> имя, я получаю сообщение об ошибке в ГБД:

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

1 Ответ

4 голосов
/ 26 октября 2010

(мне не нравятся структуры определения типа в C без причины)

Пусть sizeof сделает всю работу за вас.

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 */ }
}
...