c++中的调试断言失败
Debug assertion failed in c++
我正在尝试开发一个代码(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
值无效。你不显示任何其他代码,很难说它出了什么问题
- 尝试使用 std::vector<std::thread时出现静态断言失败错误>
- uint_not_usable_without_attribute在业力规则中使用数字生成器时静态断言失败
- 从 exe 文件 (Visual Studio ) 启动时调试断言失败
- 在 CppUnit 中测试中止断言失败
- 使用扫描的调试断言失败
- 为什么我的Qt程序在断言失败后继续运行?
- 图片不显示,关闭时出错 --> 调试断言失败!表达式:is_block_type_valid(标头>_block_use)
- 访问提升:shared_ptr 主范围外崩溃,断言失败:px != 0.指针的正确用法是什么?
- C++ 调试断言失败 - 矢量下标超出视觉工作室的范围
- 错误:断言失败 (src.type() == CV_8UC1) 在阈值中
- Boost Beast 异步服务器失败,断言失败:(id_ != T::id) 在多个 aync 调用中
- 使用imwrite OpenCV时断言失败
- 调试断言失败的缓冲区!=nullptr
- 使用 ofstream 写入文本文件时断言失败
- 提升继续恢复断言失败
- 获取有关调试断言失败的错误:表达式:"(_Ptr_user &(_BIG_ALLOCATION_ALIGNMENT -1)) == 0" &&0
- OpenCV(3.4.1) 错误:断言失败(变暗 <= 2 && step[0] > 0) in cv::Mat::locateROI
- 在Win10上使用带有Qt5的OpenCV3.0,调试断言失败
- MFC GetDC() 断言失败 - "Not a window"
- OpenCV 错误:断言失败 - 矩阵减去