我想開發一個代碼(視覺工作室2012年)來控制一個移動機器人首先讀取聲納傳感器。
我創建了以下功能:調試斷言失敗在c + +
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
}
}
當我運行它(調試模式),我得到的錯誤:
Debug assertion failed program C:\Windows\system32\MSVCP110D.dll
它說表達:列表迭代器不dereferencable
我搜索網站和碰到這個: 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
@nwp請耐心等待我說我是新手。我沒有決定隱藏你的代碼該代碼是ARIA SDK中ArRangeDevice類的一部分。我搜索了這個類的描述,並在這裏找到它:http://www.eecs.yorku.ca/course_archive/2008-09/W/4421/docs/classArRangeDevice.html 和函數定義在這裏: http ://www.eecs.yorku.ca/course_archive/2008-09/W/4421/docs/classArRangeDevice.html#a10 和源代碼在這裏: http://www.eecs.yorku.ca/course_archive/2008-09/W/4421 /文檔/ ArRangeDevice_8cpp源。html 對不起,如果信息丟失它不是目的 –