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)
この出力を理解する必要があります。このエラーを理解するのを手伝ってくれる人はいますか?ここでの問題は何ですか?
ありがとう。