这使我疯狂。我使用在Windows的.lib,一些第三方的代码,在调试模式,是造成类似如下的错误:无法追踪潜在的内存覆盖。窗口奇怪
Run-Time Check Failure #2 - Stack around the variable 'foo' was corrupted.
将引发错误或者当对象超出范围或被删除。简单地分配这些对象之一,然后删除它会抛出错误。因此,我认为问题出现在许多构造函数/析构函数之一中,但是尽管遍历了每行代码,但我无法找到问题所在。
但是,只有在静态库中创建这些对象时才会发生这种情况。如果我在我的EXE应用程序中创建一个,错误不会出现。第三方代码本身位于静态库中。例如,此操作失败:
**3RDPARTY.LIB**
class Foo : public Base
{
...
};
**MY.LIB**
void Test()
{
Foo* foo = new Foo;
delete foo; // CRASH!
}
**MY.EXE**
void Func()
{
Test();
}
但是这将工作:
**3RDPARTY.LIB**
class Foo : public Base
{
...
};
**MY.EXE**
void Func()
{
Foo* foo = new Foo;
delete foo; // NO ERROR
}
所以,切割出“中间”的.lib文件使问题消失,正是这种weridness是推动我狂。 EXE和2个库都使用相同的CRT库。没有错误链接。第三方代码使用继承,并且有5个基类。我尽可能多地评论了代码,同时仍然可以构建代码,而我只是看不到发生了什么。
因此,如果有人知道为什么.lib中的代码对.exe中的相同代码采取不同的行为,我很乐意听到它。同上任何提示追踪内存覆盖!我正在使用Visual Studio 2008.
所有的项目都使用__cdecl。崩溃只发生在创建特定类型的对象时 - 其他对象工作正常。 – Rob 2008-12-12 16:58:02