Сегодня я научился новому трюку, заключающемуся в том, чтобы завершить структуру массивом нулевой длины, чтобы этот размер динамически изменялся по мере необходимости.Это очень удобно и помогает сэкономить большой объем памяти, когда я хочу решить, сколько пространства будет использовать моя структура во время выполнения, а не во время компиляции.
Их использование отлично работает;потом я вспомнил, что мне нужно освободить свою выделенную память, поэтому я просто выбросил свободную (struct);там, но, к моему ужасу, это привело меня к ошибке:
*** glibc detected *** ./program: free(): invalid next size (fast): <address>
======= Backtrace: =========
<omitted>
======= Memory Map: ========
<omitted>
Вот простой пример плохо отформатированного кода:
struct Stuff {
int size; // defines the amount of bytes the entire struct will take up
char data[0];
}
...
// This gives me an int and a char[30].
struct Stuff *ptr = (struct Stuff *) malloc(sizeof(struct Stuff) + 30);
...
doStuff();
...
free(ptr);
И я получаю ошибку бесплатно);
Есть идеи?