感謝您查看我的問題。C++ new()在調用ctor之前崩潰了
我有一個對象正在我的程序中動態創建。創建是循環的一部分,第一次迭代工作正常。
創建時,我的對象基類將自己添加到地圖中。
下面是一些示例代碼:
public class Base {
Base() {
// Add itself to a map
Data::objects[key] = this;
}
}
public class Derived : public Base {
// This ctor only initialize one int field.
Derived() : Base() {};
}
還挺簡單的,不是嗎?
在我的代碼中,我做了Derived * d = new Derived();
,出於某種愚蠢的原因,我得到了一個SIGSEGV。
我試着去調試它,但是它甚至沒有在崩潰前進入ctor!
這裏是我的調用堆棧,所以你可以幫助我更好:
地址:!@ 0x002c0000
NTDLL RtlReleasePebLock()
地址:@ 0x0000000c在C:\ stl_deque.h:514 !
msvrct的malloc()
的libstdC++ - 6 _Znwj()
fu87 _ZSt4cerr(此= 0xbc1ad8,E = 「//我的對象名//」)在我的//對象名稱// CPP
...其他是我的線。
謝謝,米卡埃爾
{}享受
編輯:添加信息關於地圖
地圖坐落在一個數據類,靜態。
// Data.h
class Data {
static map<int, Base*> objects;
}
// Data.cpp
#include "Data.h"
map<int, Base*> Data::objects;
// methods implementations
你怎麼能腐化堆,我怎麼能找到腐敗發生?
'map'定義在哪裏?這類問題往往表明你已經損壞了堆;不幸的是,這種問題可能直到它發生之後纔會出現。這個問題可能與您的代碼完全無關。你能整理一個相對較小的示例程序來證明問題嗎? – 2011-04-04 16:33:57
順便說一句,正確的術語是「派生」,而不是「派生」;-) – fredoverflow 2011-04-04 16:40:57
您是否從頭中刪除了未使用的函數或變量?你有沒有嘗試清理和重建? – 2011-04-04 16:51:47