2010-09-18 83 views
0

在我的C++項目中,我有一個類App和一個類窗口。 Class App有一個參數:vector<Window*>* window;訪問矢量的運行時錯誤

在App的構造函數中,它能夠使用並push_back一個Window *到這個向量上,但是在我的onMessage()方法中,它被WndProc()調用(我使用winapi),它給了我當我嘗試使用該向量時出現運行時錯誤。這些是訪問錯誤。

究竟會出現什麼問題?如果您需要更多信息,只需詢問。

+6

這將是有益的,看看一些碼。唯一可以猜測的是它的確是一個指向矢量的指針,而不是矢量。 – skimobear 2010-09-18 00:48:49

回答

2

指向矢量的指針無效或矢量中的指針無效;在這種情況下可能是前者。這在很多情況下都會發生,例如使用指向已經被銷燬的本地對象的指針。

(旁白:既然你包括了窗口一個分號,我敢打賭,這是一個數據成員,而不是一個參數)

而不是存儲在應用矢量指針,存儲載體本身。而不是存儲指向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()); 
    } 
}; 
+0

原來我正在訪問一個不存在的對象(指針...) – 2010-09-19 08:20:53