【发布时间】:2023-12-08 06:01:01
【问题描述】:
我一直在寻找与我类似的帖子,但没有成功。我正在使用的代码到目前为止似乎是确定性的,并且到目前为止可以正常工作。但是,当在其上运行 Valgrind memcheck 时,我会收到数千条警告,这些警告都涉及“条件跳转或移动取决于未初始化的值”。 跟踪错误时,valgrind 将其追溯到 brk 和 sbrk 函数。我不明白为什么会这样?,更重要的是如何解决它?下面是我的部分代码。
navSolutions->channel.satPositions = (fl64 **) calloc(3 , sizeof(fl64*));
ERRORCHECK(navSolutions->channel.satPositions == NULL)
navSolutions->channel.satPositionsOld = (fl64 **) calloc(3 , sizeof(fl64*));
ERRORCHECK(navSolutions->channel.satPositionsOld == NULL)
同样重要的是,在为我分配内存的每个指针调用 free() 时会发生很多这样的调用。 任何帮助都会很棒。提前致谢
作为快速回复的一部分,这里要求提供额外信息: 大家好,再次感谢您的快速回答。我的代码在 Linux Mint 17.2 Cinamon 64 位中运行。我也在使用以下版本的 gcc (Ubuntu 4.8.4-2ubuntu1~14.04.1) 4.8.4 和 valgrind 版本 3.10.1。我也尝试了 Nate Eldredge 给出的建议,但没有成功。以下是一些 valgrind 输出
==25494== Conditional jump or move depends on uninitialised value(s)
==25494== at 0x4669D7: _int_malloc (in /home/glonass/Documents/EclipseProjects/pyxis/bin/nav/navexe)
==25494== by 0x4695C5: calloc (in /home/glonass/Documents/EclipseProjects/pyxis/bin/nav/navexe)
==25494== by 0x40C1F5: initNavSolution (initNavSolutions.c:57)
==25494== by 0x401714: nav_init (nav_init.c:35)
==25494== by 0x40107B: main (main.c:38)
==25494== Uninitialised value was created
==25494== at 0x4BA9CC: brk (in /home/glonass/Documents/EclipseProjects/pyxis/bin/nav/navexe)
==25494== by 0x490C34: sbrk (in /home/glonass/Documents/EclipseProjects/pyxis/bin/nav/navexe)
==25494== by 0x454793: __libc_setup_tls (in /home/glonass/Documents/EclipseProjects/pyxis/bin/nav/navexe)
==25494== by 0x4543FD: (below main) (in /home/glonass/Documents/EclipseProjects/pyxis/bin/nav/navexe)
再次提前谢谢大家
【问题讨论】:
-
所以看看(一些)Valgrind 消息也会有所帮助。
-
基于标准C,我认为你不能保证你的数组被初始化为所有的NULL指针;它都是零位,但原则上 NULL 指针可以有一些其他的表示。也许这是警告的原因?如果在 calloc 之后放入一个显式循环,将分配的数组的每个元素设置为 NULL,是否有帮助?
-
在哪个平台上观察到这种行为?
-
如果您也可以发布您的
free代码会有所帮助,因为您提到问题似乎与此有关。此外,一些代码显示了 alloc/free 调用的上下文。您可能正在做免费的工作,然后仍在尝试使用指针? -
大家好,我刚刚编辑了上一个问题以添加所需的信息。