c++中的调试断言失败

Debug assertion failed in c++

本文关键字:断言 失败 调试 c++      更新时间:2023-10-16

我正在尝试开发一个代码(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

它说表达式:列表迭代器不可取消引用

我搜索了一下网站,发现:";多线程调试DLL";运行库选项在VS 2008中起作用?

我确保我使用调试dll运行库,但没有区别。我也检查了这个问题,它帮助我理解了为什么显示这个错误消息:Visual C++查找行导致";调试断言失败";

我试图在代码中找到发生这种情况的确切位置,结果发现它发生在以下行:

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

我想,一旦我运行程序,错误就会发生,但我将cout行添加到函数的输出范围中,并将其放入一个连续的while循环中。我很惊讶地发现,这个程序实际上能很好地读取声纳范围,没有任何问题。它在崩溃前读取了几次,并且在崩溃前cout正确打印了几次值。所以它并没有像我想的那样立即坠毁。

那么问题出在哪里呢?

我认为错误消息就是它所说的。你试图用迭代器做一些非法的事情。最有可能的是,一旦它被无效,或者根本没有初始化,就取消引用。

这是微软在谈论这些断言https://msdn.microsoft.com/en-us/library/aa985965.aspx

在调试器下运行你的程序,它会在断言时中断,你应该能够准确地看到你的代码中哪一行没有通过

你显示的代码中没有任何迭代器,所以我们需要看到更多的代码

EDIT-故障似乎在提供的库中。因此,让我们假设库是有效的。因此,故障是由于您没有正确使用它造成的。因此,我的猜测是您的sonar值无效。你不显示任何其他代码,很难说它出了什么问题