Valgrind 检测到内存泄漏,找不到它 C
Posted
技术标签:
【中文标题】Valgrind 检测到内存泄漏,找不到它 C【英文标题】:Valgrind detects memory leak, can't find it C 【发布时间】:2020-05-01 23:41:55 【问题描述】:Valgrind 正在发现内存泄漏,但我似乎无法确定它们,我希望这里有人可以帮助我:
主要电话是Dictionary* dictionary = initDictionary();
【问题讨论】:
不要发布代码图片 还有don't cast malloc 以后,请尝试创建一个minimal reproducible example 来复制问题,并将其展示给我们。请阅读(或刷新)how to ask good questions,以及this question checklist。 我想知道为什么你的编译器没有发出任何警告你的initDictionary
没有返回一个声明的指针。你的主线是什么样子的?如果您曾经执行过 Dictionary *d = initDictionary()
,编译应该会失败(除非您在方法本身中遇到失败条件,导致它返回 0
)。所以我怀疑你的主要内容也有问题......
用-Wall -Wextra
编译
【参考方案1】:
您的 initDictionary
不会在任何地方返回指针 dictionary
。
这意味着当你这样做时
Dictionary* dictionary = initDictionary();
dictionary
的值将是不确定的(看似随机或垃圾),取消引用此指针或将其传递给free
将导致undefined behavior。
你可以通过添加一个简单的方法来解决这个问题
return dictionary;
在initDictionary
函数的末尾。
如果你的编译器没有警告你没有从函数返回任何东西,你需要启用更详细的警告。在构建时使用gcc
或clang
我推荐选项-Wall -Wextra -Wpedantic
。对于 MSVC,请使用 /W4
。
【讨论】:
以上是关于Valgrind 检测到内存泄漏,找不到它 C的主要内容,如果未能解决你的问题,请参考以下文章