[解決済み] シグナル11[SIGSEGV]のデフォルトアクションでプロセスが終了しています。
2022-02-18 20:21:29
質問
私はEclipseでC++のプロジェクトを構築しています。データベースにはSQLITE3を使用し、XMLファイルから特定のデータを読み取るためにlibxmlを使用しています。コードは正常にコンパイルされ、実行ファイルが生成されます。しかし、バイナリを実行すると、次のようなメッセージで終了してしまいます。
Segmentation fault (core dumped)
.
Valgrindプロファイラを実行して、メモリリークの場所を検出すると、この巨大なログファイルが得られますが、これは意味がわかりません。
==4960== Invalid read of size 4
==4960== at 0x41C6EB7: sqlite3SafetyCheckSickOrOk (sqlite3.c:22048)
==4960== by 0x41EADCA: sqlite3_close (sqlite3.c:112926)
==4960== by 0x804A551: Database::close() (CEMDAPnew.cpp:133)
==4960== by 0x805D2F3: CDataCoordinator::ReadVehicleMakeData(std::string) (DataCoordinator.cpp:2709)
==4960== by 0x80689D4: main (GauravWithoutMPI.cpp:36)
==4960== Address 0x4dc1fd0 is 64 bytes inside a block of size 512 free'd
==4960== at 0x402B06C: free (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==4960== by 0x41B520F: sqlite3MemFree (sqlite3.c:15252)
==4960== by 0x41A2DF0: sqlite3_free (sqlite3.c:18986)
==4960== by 0x41EB0B4: sqlite3_close (sqlite3.c:113040)
==4960== by 0x804A551: Database::close() (CEMDAPnew.cpp:133)
==4960== by 0x805D2F3: CDataCoordinator::ReadVehicleMakeData(std::string) (DataCoordinator.cpp:2709)
==4960== by 0x80689D4: main (GauravWithoutMPI.cpp:36)
==4960==
==4960== Conditional jump or move depends on uninitialised value(s)
==4960== at 0x4532DD8: inflateReset2 (in /lib/i386-linux-gnu/libz.so.1.2.3.4)
==4960== by 0x4532EC7: inflateInit2_ (in /lib/i386-linux-gnu/libz.so.1.2.3.4)
==4960== by 0x512FE6B: ???
==4960==
==4960== Conditional jump or move depends on uninitialised value(s)
==4960== at 0x4532DD8: inflateReset2 (in /lib/i386-linux-gnu/libz.so.1.2.3.4)
==4960== by 0x4532EC7: inflateInit2_ (in /lib/i386-linux-gnu/libz.so.1.2.3.4)
==4960== by 0x5056E135: ???
==4960==
==4960== Invalid read of size 4
==4960== at 0x80BD81C: CMdcevMM::loadXmlString(_xmlNode*, _xmlDoc*, unsigned char*) (ModelModule.cpp:2849)
==4960== by 0x810D73A: CSimCoordinator::LoadXmlString(char const*) (simCoordinator.cpp:8313)
==4960== by 0x8068A4E: main (GauravWithoutMPI.cpp:45)
==4960== Address 0x0 is not stack'd, malloc'd or (recently) free'd
==4960==
==4960==
==4960== Process terminating with default action of signal 11 (SIGSEGV)
この出力の意味を理解する必要があります。どなたか、このエラーの意味を理解し、何が問題なのかを理解する手助けをしていただけませんか?
ありがとうございます。
解決方法は?
まず最初に、以下を修正する必要があります。
Invalid read
というエラーが発生します。これらは Segmentation fault の最も可能性の高い原因であり、メモリリークとは関係ありません。
最初の
Invalid read
を意味し、Valgrind の出力では
sqlite3SafetyCheckSickOrOk
の呼び出しは、以前に既に解放されたメモリを参照していました。この現象が発生した正確なコールスタックは以下のように表示されます。これは奇妙に見えます。
sqlite3_close
これは、解放されたメモリを参照しています。おそらくこれはsqliteのバグでしょう。
2番目の
Invalid read
でNULLポインタを参照することを意味します。
CMdcevMM::loadXmlString
. あなたのコードを確認してください。
関連
-
[解決済み】ファイル形式が認識されない。GCCを使用してリンカスクリプトとして扱う
-
[解決済み] コンパイル時に127のエラーが発生する。
-
[解決済み] シュール vs サール ... x86 アセンブリ gnu
-
[解決済み] 警告: 異なるサイズの整数への/からのポインタへのキャスト
-
C++コンパイルエラー:型に名前がない
-
configure: エラー: $PATH に受け入れ可能な C コンパイラがありません。
-
[解決済み] OSX 10.9にXcodeをインストール - clang: エラー: 入力ファイルがありません。
-
[解決済み] LD_LIBRARY_PATH と LIBRARY_PATH の比較
-
[解決済み】gcc makefileのエラー。"No rule to make target ..." (ターゲットにするルールがありません)
-
[解決済み】GCCのプリプロセッサー定義のダンプ
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】gcc makefileのエラー。"No rule to make target ..." (ターゲットを作るルールがない)
-
[解決済み] gcc エラー : `itoa' への未定義の参照
-
[解決済み] プリプロセッサー出力
-
[解決済み] gccのオプションにある-m32、-m64、nothingの違いは何ですか?
-
gccコンパイルオプション -fpermissive
-
[解決済み] gcc/g++とcc1/cc1plusの違いは何ですか?
-
[解決済み] cygwinにgccをインストールするにはどうしたらいいですか?
-
[解決済み】gcc makefileのエラー。"No rule to make target ..." (ターゲットにするルールがありません)
-
[解決済み】-Wl,-rpath -Wlがわかりません。
-
[解決済み] brew install gccは時間がかかりすぎる