首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >进程以信号11 [SIGSEGV]的默认动作终止

进程以信号11 [SIGSEGV]的默认动作终止
EN

Stack Overflow用户
提问于 2012-09-17 17:05:39
回答 1查看 19.8K关注 0票数 1

我正在Eclipse中构建一个C++项目。它将SQLITE3用于数据库,并使用libxml从XML文件中读取特定数据。代码可以很好地编译并生成可执行文件。但是,当我运行二进制文件时,它会以以下消息Segmentation fault (core dumped)终止。

当我运行Valgrind分析器来检测内存泄漏的位置时,我得到了一个巨大的日志文件,我对此一无所知。

代码语言:javascript
复制
    ==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)

我需要理解这个输出。有人能帮我弄明白这个错误吗?这里的问题是什么?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-17 17:32:18

首先,您应该开始修复Invalid read错误。它们是最有可能导致分段故障的原因,而分段故障与内存泄漏无关。

Valgrind输出中的第一个Invalid read表示sqlite3SafetyCheckSickOrOk调用引用了先前已释放的一些内存。它发生的确切调用堆栈如下所示。这看起来很奇怪,因为它发生在sqlite3_close中,而不是指释放的内存。这可能是sqlite错误。

第二个Invalid read表示引用CMdcevMM::loadXmlString中的空指针。检查你的代码。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12456120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档