You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么Valgrind会报conditional jump依赖未初始化值的错误?

错误产生原因

你定义的numbers数组长度为4,仅对下标为0、1、2的三个元素做了赋值,下标为3的元素未初始化,存储的是内存中的随机垃圾值。
你的for循环遍历范围是i < 4,会读取到numbers[3]的垃圾值参与num的计算,最终if (num)的条件判断结果依赖了这个未初始化的值,因此Valgrind抛出对应报错。

解决方案

根据你的使用场景可以二选一修改:

  • 如果你仅需要拼接3个数字:将数组长度改为3,同时将循环终止条件改为i < 3,避免访问不存在的数组元素,修改后的示例代码如下:
#include <stdio.h>

int main(void)
{
   int numbers[3];
   numbers[0] = 1;
   numbers[1] = 3;
   numbers[2] = 4;
   int num = 0;
   for(int i = 0; i < 3; i++)
   {
    num *= 10;
    num += numbers[i];
   }
   if (num)
   {
      printf("num %d\n", num);
   }
}
  • 如果你需要保留长度为4的数组:补充初始化numbers[3]的数值,或者定义数组时直接整体初始化,未显式赋值的元素会自动初始化为0,例如:int numbers[4] = {1,3,4};。

内容的提问来源于stack exchange,提问作者usersman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 22:09:03