访问向量的运行时错误

时间:2010-09-18 00:40:43

标签: c++ memory-management vector runtime-error

在我的C ++项目中,我有一个类App和一个类Window。 Class App有一个参数:vector<Window*>* window;

在App的构造函数中,它可以使用和push_back一个Window *到这个向量上,但在我的onMessage()方法中,由WndProc()调用(我使用的是winapi),它给了我一个我尝试使用向量时出现运行时错误。这些是访问错误。

究竟什么可能出错?如果您还需要更多信息,请询问。

1 个答案:

答案 0 :(得分:2)

指向向量的指针无效或向量中的指针无效;在这种情况下可能是前者。在许多情况下都会发生这种情况,例如使用指向已被破坏的本地对象的指针。

(旁白:假设你在窗口中加了一个分号,我敢打赌这是一个数据成员而不是参数。)

不是在App中存储矢量指针,而是存储矢量本身。不是存储指向Window对象的指针,而是自己存储Window对象。

struct App {
  vector<Window> windows;
};

但是,这需要Windows可以复制,而它们可能不是。它也不允许存储从Window派生的类型的对象。相反,您可以使用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());
  }
};