Вы, вероятно, освобождаете глобальную переменную (адрес: 0x4DC4EE0
очень близок к тому месту, где глобальные переменные живут по умолчанию в Linux / x86_64).
Запустите программу из GDB, затем выполните info symbol 0x4DC4EE0
,и GDB должен рассказать вам все, что вам нужно знать.
Обновление:
Valgrind 3.6 уже сообщает о глобальном символе.Например, для данной программы с ошибками:
#include <stdlib.h>
int x;
int main()
{
free(&x);
return 0;
}
Отчеты Valgrind 3.6:
==18731== Invalid free() / delete / delete[]
==18731== at 0x4C240E8: free /tmp/vg/coregrind/m_replacemalloc/vg_replace_malloc.c:394
==18731== by 0x4004AA: main /home/t.c:7
==18731== Address 0x60089c is 0 bytes inside data symbol "x"