Как избавиться от фиктивной ошибки утверждения _BLOCK_TYPE_IS_VALID при удалении? - PullRequest
1 голос
/ 06 октября 2011

Когда я создавал свой визуальный проект C ++ в режиме отладки, просто с двумя строками кода

TEnviron * fk = new TEnviron();
delete fk;

он выдает ошибку сбоя утверждения _BLOCK_TYPE_IS_VALID из _CrtIsValidHeapPointer.Комментарий к нему гласит:

Verify pointer is not only a valid pointer but also that it is from the 'local' heap.

TEnviron из другой библиотеки, чем моя основная программа, поэтому он не работает.Я отчаянно нуждаюсь в выявлении «реального» повреждения памяти в моем программном обеспечении, поэтому я решил использовать отладочную сборку с надеждой, что она сможет уловить повреждение, но она просто создает ложный шум и не позволяет мне продолжать дальшезаявление.Человек не может написать заявление об удалении?Пожалуйста, помогите, прежде чем меня уволят.

1 Ответ

1 голос
/ 06 октября 2011

Если говорить о MSVC, я лично создаю и удаляю объекты классов, импортированных из DLL только в этой DLL. Таким образом, они всегда существуют в куче DLL, а не в основной. Я делаю это с помощью пары статических функций создания / уничтожения. Таким образом, я могу безопасно создавать и удалять объекты из любого места. Возможно, это не лучшее решение для вас, но оно решает вашу проблему.

...