5

我只有 1 行代码,这是:

pcrecpp::RE re("abc");

在一个函数里面OnBnClickedButtonGo()。此功能在发布模式下失败,但在调试模式下工作正常。

(我在 Windows XP 上使用 Visual Studio 8。)

错误信息是:

A buffer overrun has occurred in testregex.exe which has corrupted the program's
internal state. Press Break to debug the program or Continue to terminate
the program.
For more details please see Help topic 'How to debug Buffer Overrun Issues'.

我怀疑它是它的析构函数,它是不可见的和隐含的......但我真的不知道。

PS:我静态链接到 PCRE lib 7.8 版。PS2:不是很相关,但可能会帮助一些无法链接到 PCRE 库的人(我花了几个小时才整理出来):包括#define PCRE_STATIC.

4

3 回答 3

3

在我的情况下,我有同样的错误信息。在调试中一切都很好,但在发布时我收到错误消息。我有一个本地 C/C++ 库,例如native.dll. 我创建了一个混合的非托管/托管 C++ 库,它是该库到 .net 的包装器。在某处,mixed.dll我有一个非托管函数签名声明,例如:

typedef void ( *FunctionOnStartSend)();

为此,我收到了消息,但是如果我在此处添加“魔术词”,则不会出现错误消息:

typedef void (__stdcall *FunctionOnStartSend)(); 
于 2010-01-27T13:01:40.937 回答
0

如果它仅在发布模式下发生,则有可能某些东西正在“优化”出来。尝试做一些不只是一个衬里的事情,比如 Match() ,甚至可以打印出匹配项。

于 2008-12-24T00:24:24.747 回答
0

这是我的新历史:大约一个月前,我遇到了一个奇怪的 VS2008 链接故障,那天我发现设置_SECURE_SCL=0可能会有所帮助(请参阅链接文本)。它有帮助。那天它帮助了我,我只是将这个设置传播到我们在团队中构建的所有库——那是因为 MS 说用不同的 _SECURE_SCL 构建的两个库是不兼容的。

时间过去了,三天前,当 VS2008 显示我们在第一篇文章中看到的错误消息时,我遇到了一个错误。并且调试器没有帮助,因为它仅在发布版本中溢出。我已经花了将近 2 天的时间来泵入库的代码,并且从一行到另一行的溢出都是有缺陷的。最后我开始逐行检查构建设置并计算出这个设置的差异!

为什么,哦,为什么微软的家伙不能在动态加载器代码中嵌入一些小检查来测试当前运行的库和将要动态加载的库是否不兼容?!一些节省人们时间的代码。呸!

于 2010-10-07T10:33:01.950 回答