调试断言在c ++

时间:2016-03-29 16:32:34

标签: c++ visual-studio-2012 assertions

我正在尝试开发一个代码(visual studio 2012)来控制首先读取声纳传感器的移动机器人。
我创建了以下函数:

void layer1(ArRobot *robot,ArSonarDevice *sonar)// this is the avoid front collision layer
{
    double range=sonar->currentReadingPolar(-50.0,50.0)-300;
    cout<<range<<"\n";
    //read sonar in front (subtract robot diagonal) and if <200 act
    if(range<200)
    { 
        robot->setVel(-50);robot->setRotVel(50);//move backwards and rotate
        ArUtil::sleep(200);//sleep to give time to robt to react
    }
 } 

当我运行它(调试模式)时,我收到错误:

  

调试断言失败程序C:\ Windows \ system32 \ MSVCP110D.dll

它表示Expression:list iterator not dereferencable

我搜索了网站,发现了这个: What exactly is the "Multi-threaded Debug DLL" Runtime Library option doing in VS 2008?

我确定我使用debug dll运行时库但没有区别。我也检查了这个问题,它帮助我理解为什么会显示此错误消息: Visual C++ find line causing "Debug Assertion failed"

我尝试在代码中找到确切的位置,并且发现它发生在该行:

double range=sonar->currentReadingPolar(-50.0,50.0)-300;

错误发生了,我想,只要我运行程序但是我将cout行添加到函数输出范围,我将它放在一个连续的while循环中。我很惊讶地知道该程序实际上非常好地读取了声纳范围而没有任何问题。它在崩溃之前多次读取并且在崩溃之前由cout正确地打印了几次值。所以它没有像我想象的那样立即崩溃。

那可能是什么问题?

1 个答案:

答案 0 :(得分:2)

我认为错误信息意味着它所说的内容。您正在尝试使用迭代器执行非法操作。一旦它失效,或者根本没有初始化,很可能会解除引用。

以下是Microsoft谈论这些断言https://msdn.microsoft.com/en-us/library/aa985965.aspx

在调试器下运行你的程序,它会在断言中断,你应该能够确切地看到代码的哪一行失败

您显示的代码中没有任何迭代器,因此我们需要查看更多代码

编辑 - 似乎失败在提供的库中。我们假设图书馆工作。因此,您未正确使用它会导致失败。因此,我猜您的sonar值无效。你没有显示任何其他代码很难说它错了什么