這使我瘋狂。我使用在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