我在这个问题上工作了两天,这使我发疯,因为我对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.我将整个解决方案替换为一个旧但无故障的版本,该版本在Debug模式下可以正常工作。但是,在生成此解决方案的发行版之后,立即在调试模式下发生了错误!

更新:

6.谢谢大家!我只是尝试了一下,发现即使在DLL条目的第一行中简单定义一个regex对象也会引起此错误!有任何想法吗?

7.尚未在此dll的调用程序的main()的第一行中初始化正则表达式对象,则不会产生此问题。

希望此描述可以帮助您回忆一些事情并给我一些提示。

我想问一下:

缩小并发现问题的通常策略是什么?谢谢!

最佳答案

查看您的代码,您可能想验证您的m_position值是否有效...我在您的代码中看到一个escape_type_class_jump标签,因此goto或您用来跳转到该位置的任何机制标签(我无法从屏幕截图中看出)可能正在绕过任何检查以确认您的位置增量仍然有效。

关于c++ - 在 Debug模式下访问冲突,但在 Release模式下很好,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9298893/

10-12 22:35