Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 内存泄漏是否可能是分段故障的原因?_C++_Memory Leaks_Segmentation Fault_Valgrind - Fatal编程技术网

C++ 内存泄漏是否可能是分段故障的原因?

C++ 内存泄漏是否可能是分段故障的原因?,c++,memory-leaks,segmentation-fault,valgrind,C++,Memory Leaks,Segmentation Fault,Valgrind,我有一个复杂的应用程序,有很多第三方库和动态加载的插件。在主出口后,某些东西导致应用程序崩溃(SIGSEGV)。调用堆栈指向未知地址,因此我不仅无法调试,甚至不知道崩溃发生在哪里 我尝试使用Valgrind运行该应用程序-它显示泄漏(约千字节),但我认为它们是误报,并且/或者我无法对其采取任何措施,因为它们来自第三方 我的问题是:我相信内存泄漏不会导致分段错误,至少我无法找出可能的情况。但是,由于我不确定是否希望听到泄漏会破坏程序的情况(假设在内存不足的情况下不是疯狂的泄漏)。不,内存泄漏本身不

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

我尝试使用
Valgrind
运行该应用程序-它显示泄漏(约千字节),但我认为它们是误报,并且/或者我无法对其采取任何措施,因为它们来自第三方


我的问题是:我相信内存泄漏不会导致分段错误,至少我无法找出可能的情况。但是,由于我不确定是否希望听到泄漏会破坏程序的情况(假设在内存不足的情况下不是疯狂的泄漏)。

不,内存泄漏本身不会导致分段错误。但是,内存泄漏通常表示代码不整洁,在不整洁的代码中,可能会出现其他问题,从而导致分段错误。

不,分段错误本身并不比尝试访问不允许访问的内存更重要。另一方面,内存泄漏是指分配一些内存,然后“忘记”内存块的位置。存储的数据仍然存在,但无法再从该程序实例访问它


这两种错误/错误几乎总是因为草率的编码实践而发生。因此,导致内存泄漏的同一个草率编码也可能是分段错误的原因。

如果内存泄漏,则可能是内存区域管理不当/使用不当,从而导致分段错误。泄漏的对象可能在运行时清理了某些内容被破坏了,但无法修复,因为它被泄露了,这导致它在关闭时破裂。@NathanOliver:我认为这通常被称为资源泄露。内存泄漏是一个子集。但如果未能调用
操作员delete
,则不会导致崩溃。(假设没有自定义
操作员新建/删除的愚蠢游戏)泄漏不太可能是误报。您可能无法对它们做任何事情,在这种情况下,您应该考虑为它们创建一个抑制文件。我看到的情况是,如果内核不能映射内存,它就会杀死进程。如果幸运的话,内核选择牺牲泄漏的进程。@S.M.在任何有segv概念的现代系统上都没有。此外,正如我所说,SEGFULT的原因不是泄漏,而是内存不足和代码不正确执行内存管理,所以我仍然支持我的答案。