Как работает realloc, в качестве аргумента передан размер 0Linux

Ответить Пред. темаСлед. тема
Anonymous
 Как работает realloc, в качестве аргумента передан размер 0

Сообщение Anonymous »

Как работает функция realloc, передавшая в качестве аргумента нулевой размер?
со страницы руководства:
Если ptr не имеет значения NULL, он должен
возвращаться функцией более ранний вызов malloc(), calloc() или realloc().
Почему это нужно?
скомпилируйте это с gcc (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0 без опций(флагов)
этот пример

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

#include 

int main () {
int *p = malloc(0);
p = realloc(p, 0);
return 0;
}
это рабочий код, проверка памяти с помощью valgrind показывает это:

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

valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes ./test
==185872== Memcheck, a memory error detector
==185872== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==185872== Using Valgrind-3.15.0 and LibVEX; rerun with -h for copyright info
==185872== Command: ./test
==185872==
==185872==
==185872== HEAP SUMMARY:
==185872==     in use at exit: 0 bytes in 0 blocks
==185872==   total heap usage: 1 allocs, 1 frees, 0 bytes allocated
==185872==
==185872== All heap blocks were freed -- no leaks are possible
==185872==
==185872== For lists of detected and suppressed errors, rerun with: -s
==185872== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from
но затем скомпилируйте это (добавлен флаг -g):

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

#include 

int main () {
int *p = NULL;
p = realloc(p, 0);
return 0;
}
Вывод valgrind показывает ошибки (утечка памяти):

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

valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes ./test
==186749== Memcheck, a memory error detector
==186749== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==186749== Using Valgrind-3.15.0 and LibVEX; rerun with -h for copyright info
==186749== Command: ./test
==186749==
==186749==
==186749== HEAP SUMMARY:
==186749==     in use at exit: 0 bytes in 1 blocks
==186749==   total heap usage: 1 allocs, 0 frees, 0 bytes allocated
==186749==
==186749== 0 bytes in 1 blocks are definitely lost in loss record 1 of 1
==186749==    at 0x483B723: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==186749==    by 0x483E017: realloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==186749==    by 0x10916D: main (test1.c:5)
==186749==
==186749== LEAK SUMMARY:
==186749==    definitely lost: 0 bytes in 1 blocks
==186749==    indirectly lost: 0 bytes in 0 blocks
==186749==      possibly lost: 0 bytes in 0 blocks
==186749==    still reachable: 0 bytes in 0 blocks
==186749==         suppressed: 0 bytes in 0 blocks
==186749==
==186749== For lists of detected and suppressed errors, rerun with: -s
==186749== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
почему это происходит, даже если я ничего не выделил?

Подробнее здесь: https://stackoverflow.com/questions/793 ... s-argument
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как работает realloc, в качестве аргумента передан размер 0
    Anonymous » » в форуме Linux
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Как использовать moq для проверки того, что аналогичный объект был передан в качестве аргумента?
    Anonymous » » в форуме C#
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Динамический массив: двойной размер realloc vs Big Reserve + Commit
    Anonymous » » в форуме C++
    0 Ответы
    0 Просмотры
    Последнее сообщение Anonymous
  • Ошибка недопустимого аргумента при присоединении к потоку, в котором не передан аргумент
    Anonymous » » в форуме C++
    0 Ответы
    38 Просмотры
    Последнее сообщение Anonymous
  • VkCreateInstance — realloc() с размером 0 — ошибка valgrind
    Гость » » в форуме C++
    0 Ответы
    36 Просмотры
    Последнее сообщение Гость

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