带有对的c ++变换得到分段错误

Rug*_*rra 2 c++ stl transform std-pair

此代码有效:

class Test
{
public:
  Test(string name) : _name(name) {};
  bool operator()() { cout << "hello " << _name << endl; return true; }
  string name() { return _name; }
private:
  string _name;
};

pair<string, bool>
inline execute_test(Test* t) {
  return pair<string, bool>(t->name(), (*t)());
}

int main()
{
  vector<Test*> tests;
  vector<pair<string, bool> > results;
  tests.push_back(new Test("Test1"));
  tests.push_back(new Test("Test2"));

  for (unsigned int i=0; i < tests.size(); ++i)
      results.push_back(execute_test(tests[i]));

}
Run Code Online (Sandbox Code Playgroud)

现在我想使用trasform而不是for cicle:

transform(tests.begin(), tests.end(),
          results.begin(),
          execute_test);
Run Code Online (Sandbox Code Playgroud)

但是我遇到了分段错误.问题出在哪儿?

Nav*_*een 9

那是因为transform期望results对象具有所需的内存分配,即它预期results.size()至少是如此大tests.size().如果你想要执行push_back操作results那么你应该使用std::back_inserter(results)第三个参数.否则,当transform使用*您传递的输出迭代器时,它将是无效的内存位置并将导致分段错误.