0

有一些问题有相同的错误,但没有一个与我的情况相符。

我有两个类:加载器和处理器。加载器加载一个字符串向量。处理器在构造函数中调用 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 调用时给了我同样的错误。

4

0 回答 0