gpt4 book ai didi

c++ - 无论如何有一个 valgrind 消息 "Conditional jump or move depends on uninitialized value"可以是所谓的 'false positive'

转载 作者:可可西里 更新时间:2023-11-01 16:35:52 24 4
gpt4 key购买 nike

我在这里找到的大多数问题都提供一段代码,并由指出实际错误的人回答。我的问题是关于一般未初始化值的条件跳转。我可以理解,如果确定此分配仅完成一次并且在程序的生命周期内可能需要,则不必在程序结束时清理一 block 内存。据我所知,当程序终止时,GType 系统会留下大量未释放的内存。这些未释放的 block 可以被视为“误报”。但是“有条件的跳跃或移动未初始化的值”会是误报吗?我唯一能想出的是有人通过读取随机地址来实现(坏的)随机函数(其中随机地址本身是棘手的部分;)。另一个例子可能是硬件映射到内存的一部分然后被读取,但这主要是由驱动程序而不是由普通用户应用程序完成的。是否有任何其他示例(最好是 C)可能导致这种误报?

最佳答案

valgrind 报告的是,它看到一个基于读取的跳转,该位置从它知道它是由程序分配但尚未看到初始化的位置读取。如果对象是由 valgrind 不知道的某种魔法初始化的,则可能会发生这种情况。体系结构不断发展,也许您有 valgrind 不太了解的指令或寄存器类型。

这种非初始化的另一个困难来源是union。两个来源:

  • 默认情况下,只有第一个成员被初始化,所以当另一个字段超出第一个成员时,该部分可能是未初始化。
  • 如果 union 的成员是 struct 他们可能有填充字节在不同的地方,所以成员的一部分可能是如果您分配给其他成员,则未初始化。

在某些情况下,甚至读取这些东西(例如通过 unsigned char[])可能是合法的,所以如果你认为这些东西是错误(误报)或不是问题的观点。

关于c++ - 无论如何有一个 valgrind 消息 "Conditional jump or move depends on uninitialized value"可以是所谓的 'false positive',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8432202/

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