Отладчик выдаёт ошибку
От: RussianFellow Россия http://russianfellow.livejournal.com
Дата: 15.03.18 14:32
Оценка: :)))
Я разрабатываю диалоговую программу на Visual Studio 2012.
И у меня в отладчике выскакивает сообщение:

Debug Assertion Failed!

Program: F:\Roman\Roman\MyProgram\MyProgram\Debug\MyProgram.exe

File: f:\dd\vctools\crt_bld\self_x86\crt\src\dbgheap.c

Line: 1332

Expression: _CrtIsValidHeapPointer(pUserData)


Что это означает? Как исправить эту ошибку?
1613 г. = 2024 г.
Re: Отладчик выдаёт ошибку
От: Maniacal Россия  
Дата: 15.03.18 14:50
Оценка:
Здравствуйте, RussianFellow, Вы писали:

RF>Expression: _CrtIsValidHeapPointer(pUserData)

RF>[/q]

RF>Что это означает? Как исправить эту ошибку?


Обычно такое происходит при попытке повторного освобождения памяти или при попытке вызвать detele для массива (созданного new[]) и наоборот, вызвать delete[] для указателя одиночный объект
Re: Отладчик выдаёт ошибку
От: Pzz Россия https://github.com/alexpevzner
Дата: 15.03.18 17:28
Оценка:
Здравствуйте, RussianFellow, Вы писали:

RF>Я разрабатываю диалоговую программу на Visual Studio 2012.

RF>И у меня в отладчике выскакивает сообщение:

Это не отладчик выдает ошибку. Это программа выдает ошибку, а отладчит умеет ее показывать.

RF>

RF>File: f:\dd\vctools\crt_bld\self_x86\crt\src\dbgheap.c


Слово heap в названии файла как-бы намекает, что речь идет об выделении/освобождении памяти.

RF>

RF>Expression: _CrtIsValidHeapPointer(pUserData)


Слова IsValidHeapPointer как бы намекают о том, что речь идет о проверке валидности (IsValid) указателя (Pointer) на некий объект в куче (Heap). А слова UserData как бы намекают о том, что указатель был получен от "пользователя" (User). А поскольку речь идет о C run-time library (CRT), то ее пользователем является программа, которая ее использует.

Складывая все вместе, мы можем предположить, что библиотеке был передан невалидный указатель. Поскольку в контексте выделения/освобождения памяти указатель библиотеке передается обычно с целью освобождения, и изредка с целью перевыделения (realloc), то идем в исходники своей программы и пытаемся понять, с чего бы она попыталась освободить нечто, что библиотека не считает валидным (т.е., ранее выделенным) объектом.

Обычно такое бывает, когда кусок памяти освобождают дважды, либо пытаются освободить то, чего раньше не брали (например, указатель на статический объект, на объект на стеке, или на середину вполне валидного объекта, или вообще в указателе содержится мусор, т.е., мы забыли положить в него осмысленное значение).
Re[2]: Отладчик выдаёт ошибку
От: RussianFellow Россия http://russianfellow.livejournal.com
Дата: 19.03.18 06:50
Оценка: :)
А как локализовать эту ошибку? ASSERT_VALID ставить?
1613 г. = 2024 г.
Re: Отладчик выдаёт ошибку
От: Serpuh фотомер.рф
Дата: 19.03.18 07:54
Оценка:
Проверь что все ID это диалога в resource.h разные.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.