1

できる限り最善の方法で質問します。

カメラメーカーのサンプルコード (「main.cpp」と呼ばれる 1 つのファイルのみ) を使用して、Ubuntu 11.10 でカメラから画像を読み取りたいと考えています。サンプル プロジェクトを使用すると、すべて正常に動作し、画像データを受け取ることができます。しかし、この「main.cpp」を実際のプロジェクトに追加してコンパイルすると、アプリケーションがクラッシュします。

このエラーの原因となっている部分を特定することは非常に困難です。しかし、私からいくつかのコードを削除すると (コンパイルされていますが、間違いなく使用されていません!)、プログラムは期待どおりに動作します。私のコードがコンパイルされているときにリンクしている別のライブラリによって引き起こされたエラーがあると思います (例: Opencv または boost?)。どの部分がこの動作を引き起こしているのかを突き止めようとしていますが、この Gist にあるこのクラッシュ メッセージから有用な情報を抽出できる場合は、その間に教えていただければ幸いです。

私のlibcは壊れていますか?

4

1 に答える 1

0

libc のバグ?

いいえ。

*** glibc detected *** ./myProject: double free or corruption (!prev): 0x09c12660 ***

このエラーは、アプリケーションがなんらかの方法でヒープを破損したことを意味します。free同じポインタを 2 回編集したか、割り当てられたバッファの末尾を超えて書き込んだ可能性があります。

このようなヒープ破損のバグを見つけるためのツールがValgrindです。

追加のコードをリンクした場合にのみクラッシュが発生するという事実は、単なる偶然の可能性があります。おそらく、追加のコードがなくてもアプリケーションにバグが存在する可能性がありますが、クラッシュにはまだ現れていません。

可能性は低いですが、余分なコードがバグを引き起こす可能性もあります。

どちらの場合でも、Valgrind でアプリケーションを実行すると、エラーが明らかになります。

于 2012-06-22T05:02:14.157 に答える