在我的C++項目中,我有一個類App和一個類窗口。 Class App有一個參數:vector<Window*>* window;
。訪問矢量的運行時錯誤
在App的構造函數中,它能夠使用並push_back一個Window *到這個向量上,但是在我的onMessage()方法中,它被WndProc()調用(我使用winapi),它給了我當我嘗試使用該向量時出現運行時錯誤。這些是訪問錯誤。
究竟會出現什麼問題?如果您需要更多信息,只需詢問。
在我的C++項目中,我有一個類App和一個類窗口。 Class App有一個參數:vector<Window*>* window;
。訪問矢量的運行時錯誤
在App的構造函數中,它能夠使用並push_back一個Window *到這個向量上,但是在我的onMessage()方法中,它被WndProc()調用(我使用winapi),它給了我當我嘗試使用該向量時出現運行時錯誤。這些是訪問錯誤。
究竟會出現什麼問題?如果您需要更多信息,只需詢問。
指向矢量的指針無效或矢量中的指針無效;在這種情況下可能是前者。這在很多情況下都會發生,例如使用指向已經被銷燬的本地對象的指針。
(旁白:既然你包括了窗口一個分號,我敢打賭,這是一個數據成員,而不是一個參數)
而不是存儲在應用矢量指針,存儲載體本身。而不是存儲指向Window對象的指針,而是存儲Window對象本身。
struct App {
vector<Window> windows;
};
但是,這要求Windows是可複製的,而且它們可能不是。它也不允許存儲從窗口派生的類型的對象。相反,你可以使用一個boost::ptr_vector,它「擁有」指向的對象,並刪除它們時,它們就會被刪除(當ptr_vector被破壞或清除如):
struct App {
boost::ptr_vector<Window> windows;
App() {
// just an example
windows.push_back(new Window());
windows.push_back(new DerivedFromWindow());
}
};
原來我正在訪問一個不存在的對象(指針...) – 2010-09-19 08:20:53
這將是有益的,看看一些碼。唯一可以猜測的是它的確是一個指向矢量的指針,而不是矢量。 – skimobear 2010-09-18 00:48:49