有一些问题有相同的错误,但没有人符合我的情况。
我有两个类:Loader和Processor。加载器加载字符串向量。处理器在构造函数中调用要加载的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();
}
在创建“loaded”和调用processStrings的for循环之间,向量包含正确的字符串。这就是调试显示的内容。
第一次调用processString方法时崩溃了。它甚至没有运行该方法的第一行。
我试过了:
使用字符串而不是字符串向量。
调用Loader构造函数,loadAllId和processString 在我创建处理器的主函数外部的方法。
直接使用loader ids vector而不复制它 (加载)。
所有这些更改都在processString调用时给出了同样的错误。