Мой хрустальный шар говорит, что тебе нужно сделать
#include <stdlib.h>
во всех исходных файлах, где вы используете malloc()
, realloc()
и free()
. Если это не решит вашу проблему, вы должны опубликовать минимально компилируемый код, демонстрирующий такое поведение.
Если это действительно решит вашу проблему: пропущенный #include <stdlib.h>
означает, что malloc()
не имеет прототипа в области видимости. Компилятор предполагает, что он возвращает int
. Это не, конечно. Обычно компилятор предупреждает вас, когда вы присваиваете результат malloc()
типу указателя, но из-за приведения компилятор предполагает, что вы знаете, что делаете, и не предупреждает вас. По этой причине я не рекомендую приводить возвращаемое значение malloc()
в C.
Итак, ваш malloc()
вызов будет:
#include <stdlib.h>
TEX = malloc(TEX_MEMSIZE);
Кроме того, вы предполагаете, что sizeof(int)
делит TEX_MEMSIZE
. Вы хотите TEX_MEMSIZE
байтов или TEX_MEMSIZE
int
с? Если последнее, вам нужно умножить на sizeof(int)
в вашем malloc()
вызове:
TEX = malloc(TEX_MEMSIZE * sizeof *TEX);
Вам также следует изменить тип TEX_MEMSIZE
. В C int
гарантированно хранит только значения <= 32767. Может быть в состоянии хранить большие значения, но это не точно. Поскольку вы используете его для <code>malloc(), я бы порекомендовал тип size_t
или, что еще лучше, сделайте его #define
.
Исходя из ваших правок, вы можете изменить TEX
после malloc()
, а затем передать это значение free()
. Вы уверены, что TEX
не изменяется между malloc()
и free()
?