2016-03-29 139 views
0

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

だから何が問題だろうか?

+1

エラーは 'sonar-> currentReadingPolar'の中にあると分かり、コードを表示しないことにしました。あなたは私たちに何を期待していますか? – nwp

+0

@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 情報が見つからない場合は、 –

答えて

2

私は、エラーメッセージは、それが何を言っていると思います。あなたはイテレータで何か違法なことをしようとしています。ほとんどの場合、逆参照は無効化されるか、まったく初期化されません。ここで

マイクロソフトはこれらの話をされ、あなたが

コードを失敗している正確にどのコードの行を参照することができる必要があり、デバッガでプログラムを実行し、それがアサートで壊れるhttps://msdn.microsoft.com/en-us/library/aa985965.aspx

を主張あなたはそれにイテレーターがないことを示すので、より多くのコードを参照する必要があります。

EDIT - 提供されたライブラリにエラーがあるようです。 SOはライブラリが動作すると仮定します。そのため、正しく使用していないために失敗が発生します。私の推測では、sonarの値は無効です。

+0

@pm 100返信していただきありがとうございます。私は今、それをAriaDebugVC11.dllのシンボルがロードされていないと言うコールスタックを見ましたが、ファイルc:\ programファイル(x86)\ microsoftビジュアルスタジオ11.0 \ VC \ include \ listしかし、私はコード内のイテレータを使用していません –

+0

@pm 100返信ありがとうございますコードが正しいです私はビジュアルスタジオ2008と32ビットマシンでそれをテストし、正確なコード。今私はそれをvs2012に移動すると、このエラーが返されます。セットアップVs2012がAriadebugVC11を使用していて、ランタイムライブラリがマルチスレッドDLLに設定されていることがわかりました。AriaVc11にインクルードされたファイルを変更しました。私は問題を正確に理解できない –

関連する問題