1. ホーム
  2. c++

[解決済み] 中止されたコアのダンプされた C++

2022-03-04 17:47:22

質問

OpenCVライブラリを使用する大規模なC++関数があり、cygwin g++コンパイラでWindows上で動作しています。最後にAborted(core dumped)が出ますが、その前に関数は完全に実行されています。また、関数の最後にprintステートメントを入れようとしました。これも印刷されます。ですから、このフォルトを発生させるような論理的なバグがコードにあるわけではないと思っています。

説明してください。

私もassert文を使っていますが、abortedエラーはassert文が原因ではありません。アサーションが失敗したとは書いてありません。それは何のメッセージもなく最後に来るだけです。

また、このファイルは大きなプロジェクトの一部なので、コードも掲載することができません。

gdbの結果です。

Program received signal SIGABRT, Aborted.
0x7c90e514 in ntdll!LdrAccessResource () from /c/WINDOWS/system32/ntdll.dll

解決方法は?

メモリ障害(解放済みメモリへの書き込み、ダブルフリー、スタックオーバーフローなど)のようです。コードをコンパイルしてLinuxで実行できるようになったら、valgrindを使ってメモリの問題があるかどうかを確認することができます。また、問題がなくなるまで、アプリケーションの一部を無効にしてみて、どこでエラーが発生しているのか、手がかりを得ることができます。しかし、この方法は誤検出をする可能性があります。なぜなら、メモリ関連のバグは、エラーの原因ではないモジュールを失敗させる可能性があるからです。また、gdbでプログラムを実行することもできます。ただし、この場合もデバッガが指し示す位置がエラーの発生した位置でない可能性があります。