Это просто особенность вашего компилятора / платформы, которую вы должны были вызвать delete
дважды на pA
до того, как glibc
пожаловался ... например, на моей текущей платформе, которая является OSX 10.6.8 с gcc
версия i686-apple-darwin10-gcc-4.2.1, я получаю следующий вывод:
const
pA: 0x100100080
pB: 0x100100080
desc
desc
test(14410) malloc: *** error for object 0x100100080: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
Abort trap
Таким образом, вы можете увидеть первый вызов delete
на pA
, что по стандартным результатамв неопределенном поведении, поскольку вы не установили указатель на NULL
или 0
, он был пойман как попытка освободить уже освобожденную память во время выполнения C ++ на моей платформе.
Поскольку результатыдвойное удаление - это «неопределенное поведение», это зависит от реализации и платформы в отношении того, что происходит.
Вы можете быстрее обнаруживать ошибки памяти выделения / освобождения, если используете ссылку на память glibc.проверка согласованности путем компиляции с флагом -lmcheck
.