我在这个问题上工作了两天,这让我很生气,因为我对 C++ 还是很陌生。这个违规访问问题对您来说可能很容易,并且可能会被回答数千次。但是由于缺乏 C++ 知识,我什至无法确定曾经回答过的相同问题。
好的,这是我的问题:
1.主要代码在DLL中。我正在使用 Visual Studio 2008
2.这个 DLL 调用了 3 个外部库:boost、tinyXML 和 SRILM(一个 NLP 工具包)。
3.错误说:Unhandled exception at 0x5f4f068f (TextNormalizerAPI.dll) in tester.exe: 0xC0000005: Access violation reading location 0x00000000.
,仅在调试模式下发生。错误行是由于我的代码中初始化了 boost::regex 对象( patUsername = regex("^\\W*@[A-Za-z]");
) 引起的,但实际位置在 boost 库的深处,如下图所示:
**在大多数情况下,我不应该更改 Boost lib 的源代码,不是吗?**
4、这个错误只出现在Debug版,Release版没有。
5.我用在调试模式下正常工作的旧但无故障版本替换了整个解决方案。然而,在我生成此解决方案的发布版本后,调试模式出现错误!
更新:
6.谢谢各位!我刚刚尝试了一些东西,发现即使在DLL条目的第一行简单地定义一个正则表达式对象也会导致这个错误!有任何想法吗?
7.然而在这个dll的调用者的main()的第一行初始化一个正则表达式对象不会引起这个问题。
希望这个描述能帮助你回忆一些东西并给我一些提示。
我想问一下:
缩小范围和发现问题的通常策略是什么?谢谢你!