当前位置: 首页 > 知识库问答 >
问题:

内存泄漏可能是分段错误的原因吗?

孙玮
2023-03-14

我有一个复杂的应用程序,有很多第三方库,动态加载的插件。并且在main退出后,某个东西会导致应用程序崩溃(sigsegv)。调用堆栈指向未知地址,因此我不仅无法调试,甚至不知道崩溃发生在哪里。

我试着用valgrind运行这个应用程序--它显示了泄漏(一些千字节),但我认为它们是误报,并且/或者我无法对它们做任何处理,因为它们来自第三方。

我的问题:我相信内存泄漏不可能造成一个分段故障,至少我找不到可能的场景。但因为我不确定,我希望听到当一个泄漏可以破坏程序的情况(假设它不是一个疯狂的泄漏,当我只是内存不足)。

共有2个答案

谭晓博
2023-03-14

不,分段错误本身只不过是试图访问一段不允许访问的内存。另一方面,内存泄漏是当你分配了一些内存,但后来却“忘记”了内存的位置。存储的数据仍然在那里,但是不能再从该程序实例访问它了。

这两个错误/错误几乎总是由于草率的编码实践而发生的。因此,造成内存泄漏的相同的草率编码也可能是造成分段错误的原因。

马淳
2023-03-14

不,内存泄漏本身不会导致分段错误。然而,内存泄漏通常表示代码不流畅,而在不流畅的代码中,很可能存在其他问题,这些问题会导致分段错误。

 类似资料:
  • 我正在启用持久性的Kubernetes集群中运行Ignite。每台机器都有一个24GB的Java堆,20GB专用于持久内存,内存限制为110GB。我的相关JVM选项是。在每个节点上运行DataStreamer数小时后,我的集群上的节点达到了它们的k8s内存限制,触发了OOM杀机。运行Java NMT后,我惊讶地发现分配给内部内存的空间数量巨大。 Kubernetes metrics证实了这一点:

  • 我试图将Ignite用作键值对的内存数据库,其值范围从50MB到800MB不等。看起来Ignite通过JVM分配堆空间,它从不清理,即使缓存条目离开堆,被清除,没有连接的客户机和运行的操作。我的机器将无法处理这样的内存消耗,因此我正在寻找一种方法来清理一些内存。 我的测试场景如下: null 我正在使用pyignite瘦客户机,通过python脚本在本地测试Ignite: 该脚本将800 MB的数

  • 我正在编写一个spring boot 2应用程序,我正在使用SQL批量复制功能在SQL Server2012数据库中插入几条记录。每插入700行,我就有600 MB的泄漏 我已经试用了Microsoft驱动程序版本6.4.0.jre8和7.2.2.jre8,但任何东西都改变了。我尝试为tomcat更改Hikari连接池,但结果是一样的。 为了调用Microsoft API,我使用了包装器框架(ht

  • 问题内容: 我收到以下警告: 我在server.js中编写了这样的代码: 如何解决呢? 问题答案: 这是在解释节点eventEmitter文档 这是哪个版本的Node?您还有什么其他代码?那不是正常行为。 简而言之,其:

  • 本文向大家介绍什么是内存泄漏?相关面试题,主要包含被问及什么是内存泄漏?时的应答技巧和注意事项,需要的朋友参考一下 答:一般我们所说的内存泄漏指的是堆内存的泄漏。堆内存是程序从堆中为其分配的,大小任意的,使用完后要显示释放内存。当应用程序用关键字new等创建对象时,就从堆中为它分配一块内存,使用完后程序调用free或者delete释放该内存,否则就说该内存就不能被使用,我们就说该内存被泄漏了。