Это будет успешно освобождено. Выделенное пространство памяти имеет размер sizeof(MY_FRAME)
, а sizeof(MY_FRAME)
здесь содержит размер вашего массива и будет sizeof(MY_FRAME_HEADER) + sizeof(unsigned char) * 3000
. Таким образом, при его освобождении диапазон памяти [px_MyFrames, px_MyFrames + sizeof(MY_FRAME))
будет освобожден.
Кроме того, еще один распространенный метод - хранить указатель массива в структуре следующим образом:
typedef struct my_frame {
MY_FRAME_HEADER x_FrameHeader;
unsigned char *uc_Frame;
} MY_FRAME;
И на этот раз инициализация и финализация будут:
/* initialization */
px_MyFrames = (MY_FRAME *)malloc(sizeof(MY_FRAME) * MAX_NUMBER_OF_FRAMES);
/* and the following line matters */
px_MyFrames->uf_Frame = malloc(sizeof(ungisned char) * 3000);
/* when in finalization */
free(px_MyFrames->uf_Frame);
free(px_MyFrames);
Кстати, программа на С должна возвращать значение 0
при обычном возврате.