我在这里遇到了一个奇怪的问题,说实话,我不知道是什么导致了它。无论出于何种原因,当我从Qt Creator调试我的应用程序时,我的应用程序运行正常,没有任何异常,但当我只运行应用程序时,我得到一个写访问冲突异常(如下所示)
(1f68.1ea8):访问冲突 - 代码c0000005(第一次机会)
0x77da2073处的异常,代码:0xc0000005:写入访问冲突位于:0x1,ntdll中的标志= 0x0!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 nc cs = 001b ss = 0023 ds = 0023 es = 0023 fs = 003b gs = 0000 efl = 00010202
!NTDLL RtlpLowFragHeapFree + 0xc5: 77da2073 8930 mov dword ptr [eax],esi ds:0023:00720065 = ????????
0x77da2073处的异常,代码:0xc0000005:写入访问冲突: 0x1,flags = 0x0
注意:内部自发停止
州从InferiorRunOk(11)变为InferiorStopOk(14)。
当我注释掉它的行时(在运行之后,然后手动附加调试器)它似乎把我带到了同一问题的不同行。我正在使用的工具链是MSVCC,附加标志:
QMAKE_CFLAGS_RELEASE + = -Zi
QMAKE_CXXFLAGS_RELEASE + = -Zi -g
QMAKE_LFLAGS_RELEASE + = / DEBUG / OPT:REF
要重新计算,这是我尝试的内容:
答案 0 :(得分:1)
你是否双重释放某些东西?快速搜索会显示this article about double freeing。
我不确定MSVCC的等价物是什么(文章提到了一个名为gflags.exe
的工具),但在Linux下使用GCC你可以使用一个名为Valgrind的程序和memcheck工具来找到这类问题