我的代码中出现分段错误,但是无法找到问题所在。这是代码中似乎发生分段错误的部分:

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


运行时仅打印以下两行

Test 1
Test 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)

关于c++ - 是什么导致此代码中的段错误?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12016215/

10-13 22:58