Удаление unique_ptr вызывает сбой в моей программе - PullRequest
0 голосов
/ 15 октября 2011

Во время выполнения, когда я закрываю свою программу, я получаю сообщение об ошибке: «CRT обнаружил, что приложение записало в память после завершения буфера кучи». Я следил за выполнением программы через деструктор для удаления уникального ptr, и произошла ошибка при вызове функции удаления. Еще одна проблема, которую я хочу упомянуть, заключается в том, что по какой-то причине определение класса, в котором находится уникальный ptr, требует наличия общедоступного конструктора копирования. Я попытался воспроизвести эти проблемы в другом проекте с другим классом и тем же классом, удалив конструктор копирования и деструктор и изменив лаборатории доступа. Я не мог воспроизвести те же проблемы - самое большое различие между этими двумя проектами - это тот, у которого есть проблемы, это общая библиотека, может ли это быть проблемой? Необходимость определить конструктор копирования, хотя он и надоедливый и излишний, меня не особо волнует, любые предположения или советы по поводу этой ошибки памяти будут высоко оценены.

1 Ответ

3 голосов
/ 15 октября 2011

crt обнаружил, что приложение записало в память после завершения буфера кучи.

Да, это сообщение появляется при вызове удаления, но оно говорит, что найдено ошибка.Не вызвано никого.Где-то в вашем коде вы пишете за концом массива, а затем во время удаления менеджер памяти обнаружил «следы» в области за пределами.

Перед каждым доступом к массиву,положить:

assert(index<array_size);
...