Блог пользователя Jace_Beleren

Автор Jace_Beleren, 11 лет назад, По-русски

Проблема в следующем: в консольном приложении дохожу дебагом до строчки return 0 в main-е жму ф10(шаг с обходом) меня перебрасывает в дизассемблированный код: 11143B4 add esp,0Ch

011143B7 mov dword ptr [mainret (11170E8h)],eax

011143BC cmp dword ptr [managedapp (11170DCh)],ebx

011143C2 jne $LN36 (11143FBh)

011143C4 push eax

011143C5 call dword ptr [impexit (11150A8h)]

на строчке call программа виснет, при том что все необходимые результаты уже получены и выведены в файл. Ранее никогда с подобным не сталкивался, может кто-нибудь подскажет чем может вызвана подобная проблема и каковы предполагаемые пути её устранения.

  • Проголосовать: нравится
  • -5
  • Проголосовать: не нравится

»
11 лет назад, # |
  Проголосовать: нравится +8 Проголосовать: не нравится

После завершения функции main выполняется еще некоторая работа. Например, вызываются деструкторы у глобальных переменных и у локальных переменных main.

Однако похожие ошибки (падение при завершении) обычно связаны с тем, что вы где-то записали не по тому адресу (например, случился выход за границу массива) и подпортили какую-нибудь таблицу от C Runtime Library, что может привести в том числе к таким последствиям.

»
11 лет назад, # |
Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

Попробуй запустить программу под valgrind. Это инструмент для динамического анализа и если проблема действительно в проезде по памяти, то valgrind это с большой вероятностью заметит. p.s. valgrind замедляет работу примерно в 50-100 раз, поэтому желательно сократить входные данные до минимума.