【发布时间】:2016-03-29 16:32:33
【问题描述】:
我正在尝试开发代码 (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
它说表达式:列表迭代器不可取消引用
我搜索了这个网站,发现了这个: What exactly is the "Multi-threaded Debug DLL" Runtime Library option doing in VS 2008?
我确定我使用的是调试 dll 运行时库,但没有区别。我也检查了这个问题,它帮助我理解了为什么会显示此错误消息: Visual C++ find line causing "Debug Assertion failed"
我尝试在代码中找到发生这种情况的确切位置,并发现它发生在以下行:
double range=sonar->currentReadingPolar(-50.0,50.0)-300;
我想,一旦我运行程序,错误就会发生,但是我将 cout 行添加到函数中以输出范围,并将它放在一个连续的 while 循环中。令我惊讶的是,该程序实际上可以很好地读取声纳范围而没有任何问题。它在崩溃之前读取了几次,并且在崩溃之前由 cout 正确打印了几次值。所以它并没有像我想象的那样立即崩溃。
那么可能是什么问题?
【问题讨论】:
-
所以您发现错误在
sonar->currentReadingPolar内部并决定不显示它的代码。你希望我们做什么? -
@nwp 请耐心等待我说我是新手。我没有决定对你隐藏代码 该代码是 ARIA SDK 中 ArRangeDevice 类的一部分。我搜索了这个类的描述,并在这里找到它:eecs.yorku.ca/course_archive/2008-09/W/4421/docs/…,函数定义在这里:eecs.yorku.ca/course_archive/2008-09/W/4421/docs/…,来源在这里:eecs.yorku.ca/course_archive/2008-09/W/4421/docs/… 抱歉,如果缺少信息,则不是有意的
标签: c++ visual-studio-2012 assertions