プログラムを終了すると、「glibcが検出されました」というメッセージが次のように表示されます。しかし、これがエラーや警告などであるかどうかはわかりません。誰かがこのメッセージの意味と私がしなければならない方法を説明できますか?
3 に答える
これは、プログラムでヒープが破損していることを意味します。を使用してメモリを割り当てる可能性がありますmalloc
が、実際の境界外に書き込むと、ヒープが破損します。を呼び出すとfree
、glibc は破損を検出して報告します (具体的には、次の空きチャンクのサイズが上書きされます)。
この問題は必ず修正する必要があります。 Valgrindは、実際にヒープの破損を引き起こしているコードを突き止めるのに非常に役立ちます。
プログラムのどこかでヒープが壊れています。realloc
およびを使用して取得した外部メモリに書き込んだ可能性がありmalloc
ます。しかし、メモリを解放しようとすると、malloced
メモリは解放されましたが、範囲外に書き込んだメモリも解放されませんでした。これにより、破損エラーが発生します。次のようないくつかのツールがあります。Windowsのデバッグ、electricfence、dmalloc、valgrind。また、ループ内で境界または制限が適切にチェックされていないために単純while loop
または aがエラーを引き起こしている可能性があるため、ループをチェックインすることをお勧めします。for loop
ヒープを破損したため、メモリ管理に関してどこかで間違いを犯しました。そのようなエラーを見つけて修正するには、Valgrindのようなツールを使用してください。