是什么导致此代码中的分段错误?

时间:2012-08-18 05:53:43

标签: c++ pointers vector segmentation-fault

我的代码中出现了分段错误,但我无法跟踪问题。这是代码中出现分段错误的部分:

for (i = 0; i < ROBOTCOUNT; i++)
{
    ROS_INFO("Test 1");
    Robot r;
    robotList.push_back(&r);
    ROS_INFO("Test 2");
}

运行时,只打印以下两行

Test 1
Test 2

基于打印行,似乎代码只循环一次,然后发生分段错误。

导致这种情况的原因是什么?

1 个答案:

答案 0 :(得分:2)

您正在保存列表中销毁的本地变量的地址。

for (i = 0; i < ROBOTCOUNT; i++)
{
    ROS_INFO("Test 1");
    Robot r; <== local variable
    robotList.push_back(&r); <== save address of local
    ROS_INFO("Test 2");
}  <== r is destroyed

因此您可能稍后访问已删除的内存

使用std::vector<std::shared_ptr<Robot>>

std::vector<std::shared_ptr<Robot>> v;
std::shared_ptr<Robot> ptr( new Robot() );
v.push_back(ptr)