2008-12-23 66 views
5

我只有1行代码,并且是这样的:为什么我用这行代码得到缓冲区溢出错误?

pcrecpp::RE re("abc"); 

函数OnBnClickedButtonGo()内部。此功能在发布模式下失败,但在调试模式下可以正常工作。

(我使用Visual Studio 8的Windows XP。)

的错误信息是:

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

+0

你建立了图书馆,还是它是一个罐头库?无论哪种方式,它是用相同的编译器编译的吗?如果没有,我会试着用你的编译器来构建这个库,看看是否有帮助。 – 2008-12-24 00:43:33

回答

0

如果它仅在发布模式下发生,则有可能某些内容正在被“优化”。尝试做更多的事情不仅仅是一个班轮,比如Match(),甚至可能打印出比赛。

3

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

typedef void (*FunctionOnStartSend)(); 

这样做的我得到的消息,但如果我添加了一个“魔语”有话就没有错误消息:

typedef void (__stdcall *FunctionOnStartSend)(); 
+0

明智的答案,男人! – LmTinyToon 2016-10-20 11:58:09

0

这是我的新的历史: 大约一个月前,我已经得到了VS2008的一个奇怪的链接失败,那一天我挖,设置_SECURE_SCL = 0可以帮助(见link text)。它帮助。那一天它帮助我,我只是将这个设置传播给我们在团队中建立的所有库 - 这是因为MS说,使用不同的_SECURE_SCL构建的两个库是不可兼容的。

时间过去了,三天前我有一个错误,当VS2008说我们在第一篇文章中看到的错误信息。并且调试器没有任何帮助,因为它只在Release版本中超载。我已经用了将近两天的时间来处理libs的代码,并且溢出漏洞在线路上存在漏洞。最后,我开始逐行检查构建设置,并在此设置中计算出差异!

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