0

コードでセグメンテーション違反が発生していますが、問題の追跡に問題があります。これは、セグメンテーション違反が発生していると思われるコードのセクションです。

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

実行すると、次の2行のみが出力されます

Test 1
Test 2

印刷行に基づくと、コードは1回だけループし、その後セグメンテーション違反が発生するようです。

これを引き起こしている可能性がありますか?

4

1 に答える 1

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)
于 2012-08-18T05:56:05.213 に答える