struct foo* fooArray= malloc(sizeof(*fooArray)*5);
, когда вы выделяете fooArray, вы выделяете ОДНЫЙ буфер размером 5 раз в структуре foo. Если вы хотите провести 5 структура Foo, вы хороши, но вы не должны таНос членов массива:
struct foo* newFoo = fooArray
struct foo* newFoo2 = fooArray + 1;
struct foo* newFoo3 = &fooArray[2]; /* array notation */
..и вы можете освободить их всех только сразу
free(fooArray);
BUT ...
Если вы хотите, чтобы набор из 5 указателей был неправильным, и тип данных слева неверны.
struct foo* fooArray= malloc(sizeof(*fooArray)*5);
следует читать:
struct foo** fooArray = malloc(sizeof(struct foo*) * 5);
Это указатель на 5 указателей. Тогда ваша запись массива может работать для выделения и освобождения.
fooArray[0] = malloc(sizeof struct foo);
free(fooArray[0]);
Кстати, если вы хотите, «массив», чтобы расти и уменьшаться динамически, вы не wan't массив. вы хотите Single linked list
Просто включите указатель (struct foo *) в struct foo, и вы можете покончить с fooArray.
Почему вы назначаете указатель в 'newFoo'? Я думаю, что вы хотите выделить структуру 'foo' вместо, как в' malloc (sizeof (foo)) '. – Dacav
Почти ничего из этого кода не имеет смысла – harold
Do: 'free (fooArray);'. 'free()' ожидает указатель, возвращаемый функциями семейства malloc. Не знаю, каково ваше намерение со всеми этими назначениями ... Если это то, что вы похожи на код, тогда у вас еще много проблем ... –