我在代码中遇到内存泄漏问题,当它运行时,堆继续增加到最大值,我需要重新启动服务,我运行top命令并看到堆正在增加每当我调用一个场景时服务。
我用valgrind运行服务,
valgrind --log-file=log-feb19.txt --leak-check=full --show-reachable=yes --track-origins=yes myservice
我在运行场景时没有看到任何明显丢失或可能丢失的块,但我看到很多条件跳转或移动取决于未初始化的值错误。
这些是否会导致内存泄漏?
我得到的例子:
==27278== Conditional jump or move depends on uninitialised value(s)
==27278== at 0xC90D91E: xcsFreeMemFn (in /apps/opt/mqm/lib64/libmqmcs_r.so)
........
==27278== Uninitialised value was created by a heap allocation
==27278== at 0x4A078B8: malloc (vg_replace_malloc.c:270)
==27278== by 0xC90E32F: xcsGetMemFn (in /apps/opt/mqm/lib64/libmqmcs_r.so)
有人可以提供帮助。
答案 0 :(得分:15)
不,这意味着您正在访问尚未初始化的内存:
int main()
{
int unitialized;
std::cout << unitialized << std::endl;
}
会触发此错误。
稍微会更常见的是:
struct X
{
X() : i(42) { }
private:
int i;
int* forgotten; // oops, not initialized
};
最后,当您不使用memset
清除整个缓冲区时,基于malloc的代码经常发生这种情况。所以,
答案 1 :(得分:4)
在Valgrind用户手册的4.2.2. Use of uninitialised values部分
中对此进行了解释当您的程序使用a时,会报告未初始化的值使用错误 尚未初始化的值 - 换句话说,未定义。
...
了解您的程序可以复制很重要 垃圾(未初始化)数据尽可能多。 Memcheck观察到了这一点 并跟踪数据,但不抱怨。投诉是 仅在您的程序尝试使用未初始化时才发出 数据可能会影响程序的外部可见性 行为。
答案 2 :(得分:1)
否这不表示内存直接泄漏。但是,根据非初始化变量进行条件跳转可能会导致几乎任何事情。一般使用未初始化的变量会调用未定义的行为。