Приложение создает исключение без отладчика - PullRequest
1 голос
/ 09 января 2012

У меня здесь какая-то любопытная проблема, и, честно говоря, я понятия не имею, что ее вызывает. По какой-то причине, когда я отлаживаю свое приложение из Qt Creator, мое приложение работает без каких-либо исключений, но когда я только запускаю приложение, я получаю исключение нарушения прав записи (как показано ниже)

(1f68.1ea8): нарушение доступа - код c0000005 (первый шанс)

Исключение в 0x77da2073, код: 0xc0000005: нарушение прав записи в: 0x1, флаги = 0x0 в ntdll! RtlpLowFragHeapFree

Исключения первого шанса сообщаются до обработки любого исключения.

Это исключение можно ожидать и обрабатывать.

eax = 00720065 ebx = 82130074 ecx = 006f007f edx = 0000006f esi = 01fa5fb6 edi = 82130000 eip = 77da2073 esp = 0012cc70 ebp = 0012cca4 iopl = 0 nv up ei pl nz na po sss23 = 001 es = 0023 fs = 003b gs = 0000 efl = 00010202

!

Ntdll RtlpLowFragHeapFree + 0xc5: 77da2073 8930 mov dword ptr [eax], esi ds: 0023: 00720065 = ????????

Исключение в 0x77da2073, код: 0xc0000005: нарушение прав записи в: 0x1, флаги = 0x0

ПРИМЕЧАНИЕ: НИЖНЯЯ СПОНТАННАЯ ОСТАНОВКА

Состояние изменено с InferiorRunOk (11) на InferiorStopOk (14).

Когда я закомментирую строку, в которой он разрывается (после запуска, а затем вручную подключая отладчик), это просто, кажется, приводит меня к другой строке для той же проблемы. Я использую цепочку инструментов MSVCC с дополнительными флагами:

QMAKE_CFLAGS_RELEASE + = -Zi

QMAKE_CXXFLAGS_RELEASE + = -Zi -g

QMAKE_LFLAGS_RELEASE + = / DEBUG / OPT: REF

Чтобы рассказать, вот что я пробовал:

  • Отладка с настройкой отладки - ok
  • Запуск с конфигурацией отладки - ok
  • Отладка с конфигурацией выпуска - ок
  • Работа с конфигурацией выпуска - исключение

1 Ответ

1 голос
/ 09 января 2012

Вы дважды что-то освобождаете? Быстрый поиск вызывает эту статью о двойном освобождении .

Я не уверен, каким может быть эквивалент MSVCC (в статье упоминается инструмент под названием gflags.exe), но в Linux с GCC вы можете использовать программу Valgrind с инструментом memcheck, чтобы найти такую ​​проблему.

...