c++ - 在 Debug模式下访问冲突,但在 Release模式下正常

标签 c++ boost access-violation release-mode

我在这个问题上工作了两天,这让我很生气,因为我对 C++ 还是很陌生。这个违规访问问题对您来说可能很容易,可能会被回答数千次。但是我对 C++ 知识的缺乏使我什至无法识别曾经回答过的相同问题。

好的,这是我的问题:

1. 主要代码在DLL中。我正在使用 Visual Studio 2008

2.这个 DLL 调用了 3 个外部库:boost、tinyXML 和 SRILM(一个 NLP 工具包)。

3. 错误显示:在 0x5f4f068f (TextNormalizerAPI.dll) in tester.exe: 0xC0000005: Access violation reading location 0x00000000. 未处理的异常,仅发生在调试中模式。错误行是由我代码中的 boost::regex 对象 (patUsername = regex("^\\W*@[A-Za-z]");) 初始化引起的,但实际位置在boost库的深处,如下图所示:

The error occurred in boost lib, not in my code

**在大多数情况下,我不应该更改 Boost 库的源代码,不是吗? **

4.这个错误只发生在Debug版本,Release版本没有。

5. 我将整个解决方案替换为一个旧的但无故障的版本,该版本在 Debug模式下可以正常工作。然而,在我生成此解决方案的发布版本后,立即在 Debug模式下发生错误!

更新:

6. 谢谢大家!我刚刚尝试了一些东西,发现即使是在 DLL 条目的第一行简单地定义一个正则表达式对象也会导致这个错误!有任何想法吗?

7. 但是在这个dll调用者的main()函数的第一行初始化一个regex对象不会导致这个问题。

希望这个描述能帮助你记忆起一些事情并给我一些提示。

我想问:

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

最佳答案

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

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

相关文章:

C++ 编译器错误 "cannot be thread-local because it has non-POD type”“

c++ - 由于错误的 Makefile 语法而未定义对库的引用?

c# - 为什么 try-catch block 无法处理异常?

c++ - 如何序列化 boost::accumulators::accumulator_set<>?

C++ boost asio 多线程

c++异常访问冲突与int变量

visual-c++ - 如何处理 Visual Studio C++ 中的访问冲突?

c++ - boost::multiprecision::cpp_dec_float_50 溢出检查

c++ - 如何调用此类中的构造函数。

c++ - 谁能帮我让 glutBitmapString 工作?