Нарушение доступа в mlock - PullRequest
       25

Нарушение доступа в mlock

0 голосов
/ 12 августа 2011

У меня есть консольное приложение (написано с использованием MS VS2010 SP1). Нет MFC, нет ATL, просто стандартная библиотека. В отладочной сборке все работает ок. Но в выпуске build есть нарушение прав доступа: «Исключение первого шанса в 0x77b0206e в Mapp.exe: 0xC0000005: расположение чтения нарушения доступа 0x002cef58.»

Если я запускаю приложение из MS VS (даже в режиме выпуска), все работает нормально, и я не могу узнать, что происходит. Я попытался использовать своевременную отладку, и я получил стек вызовов:

ntdll.dll!77b020cb()    
[Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll] 
Mapp.exe!_unlock(int locknum=72090689)  Line 375    C
04320069()  

Это происходит, когда приложение закрывается и процесс уничтожения продолжается: есть одна строка, например, «delete ptr», которая вызывает исключение. Но я несколько раз проверял этот код и ничего не нашел. Я пытался использовать функции отладки CRT (диагностика утечек памяти, пользовательские перехватчики памяти и т. Д.), Но результатов не было. Также я выясняю, что эта проблема решается при использовании отладочной версии CRT (используйте многопоточную отладку (/ MTd) в конфигурации релиза). Еще одна вещь: когда я выполняю некоторые незначительные изменения в коде (например, пишу строку кода отладки), стек вызовов меняется, и каждый раз он совершенно другой. например:

ntdll.dll!77b0206e()    
[Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll] 
Mapp.exe!_unlock_fhandle(int fh=72090689)  Line 491 C
04320069()  

и еще один

ntdll.dll!77b0206e()    
[Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll] 
ntdll.dll!77b0201f()    
kernel32.dll!768cf1cc()     
Mapp.exe!free(void * pBlock=0x024950f0)  Line 51    C
Mapp.exe!CGISMapLineShape::~CGISMapLineShape()  Line 20 + 0x13 bytes    C++
Mapp.exe!CGISMapPolygonShape::`scalar deleting destructor'()  + 0x13 bytes  C++
Mapp.exe!CGISMapMultyPolygonShape::~CGISMapMultyPolygonShape()  Line 9  C++
Mapp.exe!CGISMapMultyPolygonShape::`scalar deleting destructor'()  + 0xc bytes  C++
Mapp.exe!CGISMapShapeCollection::Clear()  Line 307  C++

Я понимаю, что в коде fpplication есть некоторые ошибки, но вопрос в том, могу ли я найти его Вопрос

Ответы [ 2 ]

1 голос
/ 12 августа 2011

В релизных сборках обработка памяти сильно отличается от отладочных сборок.Эта ошибка обычно возникает при попытке получить доступ к уже удаленному объекту.Callstack - дерьмо, если вы не загружаете символы.

0 голосов
/ 17 августа 2011

Finnaly Я понял это!Было несколько ошибок и все они - индекс вне диапазона при манипулировании массивами.

Спасибо всем за помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...