有一些问题有相同的错误,但没有一个与我的情况相符。
我有两个类:加载器和处理器。加载器加载一个字符串向量。处理器在构造函数中调用 Loader 方法进行加载,然后为每个字符串调用其方法 processString。这是代码:
class Loader
{
public:
Loader() {}
void loadAllId() { loaded_ids_.push_back("a"); }
vector<string> loaded_ids_;
};
class Processor
{
public:
Processor() {
loader_ = new Loader();
loader_->loadAllId();
vector<string> loaded = loader_->loaded_ids_;
// Here the loaded vector contains the string
for (uint i=0;i<loaded.size();i++)
processString(loaded[i]);
}
void processString(string s) { cout << s << endl; }
private:
Loader* loader_;
};
int main(int argc, char *argv[])
{
Processor* proc = new Processor();
}
在“加载”的创建和调用 processStrings 的 for 循环之间,向量包含正确的字符串。这就是调试所显示的。
它在第一次调用 processString 方法时崩溃。它甚至没有运行该方法的第一行。
我试过了:
使用字符串而不是字符串向量。
在我创建处理器的主函数中调用 Loader 构造函数、loadAllId 和 processString 方法。
直接使用加载器 ids 向量而不复制它(已加载)。
所有这些更改在 processString 调用时给了我同样的错误。