Как исправить «указатель «старый» может использоваться после предупреждения «realloc» [-Wuse-after-free]» в C?Linux

Ответить
Anonymous
 Как исправить «указатель «старый» может использоваться после предупреждения «realloc» [-Wuse-after-free]» в C?

Сообщение Anonymous »

Я обнаружил предупреждение в коде C при попытке перераспределить память с помощью realloc. Конкретное предупреждение:

Код: Выделить всё

lib/gc.c: In function ‘gcLocalRealloc’:
lib/gc.c:625:9: warning: pointer ‘old’ may be used after ‘realloc’ [-Wuse-after-free]
625 |         gcLocalPop ( gc,old ) ;
|         ^~~~~~~~~~~~~~~~~~~~~
lib/gc.c:621:11: note: call to ‘realloc’ here
621 |     ptr = (void*) realloc ( ptr,SIZE ) ;
Вот код, вызывающий проблему:

Код: Выделить всё

void* gcLocalRealloc(gc_t *gc, void* ptr, size_t SIZE) {
//assert(SIZE!=0); // realloc(array, 0) is not equivalent to free(array).
if (SIZE == 0) {
gcFree(ptr);
return ptr = NULL;
}

assert(SIZE > 0);

if (ptr == NULL) return gcLocalMalloc(gc, SIZE);

void* old = ptr;

ptr = (void*) realloc(ptr, SIZE);

if (ptr != NULL) {
gcLocalPop(gc, old);
gcLocalPush(gc, ptr, SIZE);
assert(ptr != NULL);
}

return ptr;
}
Компилятор предупреждает, что указатель old можно использовать после его освобождения с помощью Realloc. Как исправить это предупреждение, сохранив при этом функциональность перераспределения памяти и обновления сборки мусора?
Заранее спасибо за помощь!

Подробнее здесь: https://stackoverflow.com/questions/793 ... ree-warnin
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»