ソナーセンサーを先に読み込んでいるモバイルロボットを制御するコード(visual studio 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ループに配置した。私はこのプログラムがソナーの範囲を実際に問題なく読んでいたことに驚きました。それはクラッシュする前に数回それを読んで、クラウトする前に値を数回正確に印刷しました。だから私は思った通りすぐにクラッシュしなかった。
だから何が問題だろうか?
エラーは '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/docs/ArRangeDevice_8cpp-source。html 情報が見つからない場合は、 –