我正在使用一个大型的闭源框架。我最近添加了一个新实体,现在我在执行某些操作时遇到访问冲突。但是,它们出现在框架内的调用中,因此我不知道我实现了什么错误,因为我没有得到调用堆栈。
在CRT文件_CRTIMP PFLS_GETVALUE_FUNCTION __cdecl __set_flsgetvalue()
中定义的函数tidtable.c
中报告违规。具体行为PFLS_GETVALUE_FUNCTION flsGetValue = FLS_GETVALUE;
。我不确定,但我认为它与函数指针有关?
错误消息为Unhandled exception at 0x0000007a in fmwk.exe: 0xC0000005: Access violation reading location 0x0000007a.
。我的解释是它试图在偏移0x7a
处访问某个对象,但它实际上是一个空指针。它是否正确?如果是,是否有办法找到该偏移对应的内容?
以下是调用堆栈:
0000007a()
fmwk.dll!100f2630()
[Frames below may be incorrect and/or missing, no symbols loaded for fmwk.dll]
<lots of framework and windows dlls>
fmwk.exe!00402ef4()
msvcr100.dll!__set_flsgetvalue() Line 145 + 0xc bytes C
msvcr100.dll!_getptd_noexit() Line 498 + 0x7 bytes C
msvcr100.dll!_getptd() Line 523 + 0x5 bytes C
msvcr100.dll!_LocaleUpdate::_LocaleUpdate(localeinfo_struct * plocinfo=0x00000000) Line 243 + 0x5 bytes C++
msvcr100.dll!x_ismbbtype_l(localeinfo_struct * plocinfo=0x00000000, unsigned int tst=0, int cmask=1386664, int kmask=1414714) Line 219 C++
msvcr100.dll!_ismbblead(unsigned int tst=0) Line 172 + 0xe bytes C++
fmwk.exe!004010a0()
fmwk.exe!00404d61()
kernel32.dll!7c817077()
答案 0 :(得分:2)
使用Application Verifier调试此访问冲突。它应该在更好的调用堆栈发生坏事时提前停止执行。
看起来你在某处取消引用了NULL指针,但程序没有立即崩溃,因为它是未定义的行为,继续执行并稍后用奇怪的调用堆栈崩溃。
答案 1 :(得分:0)
关于你的问题:是的,访问0x7A可疑看起来像在偏移量0x7a处取消引用NULL指针。 (也可能是解除引用0x20但偏移量为0x5a)。
如果没有源代码访问,很难找到正在发生的事情。您可以尝试使用您的代码进行回溯,并找出您所做的哪些更改使框架摆脱困境。然后,看看你是否使用的框架函数与它应该如何使用的不同。如果这一切似乎都没有结束,你也可以向你的框架供应商报告一个错误,但是我建议你在做之前确保错误不在你身边。