gpt4 book ai didi

c++ - valgrind Conditional jump or move depends on uninitialised value(s) ,这是否表示内存泄漏?

转载 作者:可可西里 更新时间:2023-11-01 18:08:10 28 4
gpt4 key购买 nike

我在代码中遇到内存泄漏问题,在它运行时,堆不断增加到最大值,我需要重新启动服务,我运行了 top 命令,看到每当我调用一个场景时堆都在增加服务。

我用 valgrind 运行服务,

valgrind  --log-file=log-feb19.txt --leak-check=full --show-reachable=yes --track-origins=yes myservice

我在运行场景时没有看到任何明显丢失或可能丢失的 block ,但我看到很多条件跳转或移动取决于未初始化的值错误。

这些是否算作内存泄漏?

我得到的例子:

==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)

谁能帮忙。

最佳答案

不是,这意味着你正在访问还没有初始化的内存:

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. malloc 一个大小为 m 的缓冲区
  2. 读取(例如从套接字)n 个字节
  3. 将m字节写入一个文件; (m-n) 个字节不会被初始化

关于c++ - valgrind Conditional jump or move depends on uninitialised value(s) ,这是否表示内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14952637/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com