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

C++循环赋值异常:数组l[]值错误,注释r[]赋值后恢复正常

数组越界导致的异常值问题解答

兄弟,你遇到的这个问题本质是数组越界访问引发的未定义行为,咱们一点点拆解来看:

问题根源分析

先看你代码里的这段赋值逻辑:

int r[6]; // r数组的大小是6,合法下标范围是0~5
for(int i=5;i<10;i++)
    r[i] = a[i];

当循环的i从5走到9的时候,i=6、7、8、9这几个值都超出了r数组的合法下标范围(最大只能到5)。这时候往r[i]里赋值,其实是在写不属于r数组的内存区域。

在C++里,局部数组是按顺序在栈内存中存放的,你的l[6]和r[6]是连续定义的,内存位置挨得非常近。当你越界写r[6]、r[7]...的时候,刚好就覆盖了l数组的内存空间,所以最后打印l的时候才会出现乱码。

为什么注释r的赋值就正常?

当你把r的赋值循环注释掉后,没有了越界写入的操作,l数组的内存没有被破坏,自然就能正常输出你输入的1~5啦。

修复方案

把r数组的赋值下标调整一下,让它对应到合法的范围:

for(int i=5;i<10;i++)
    r[i-5] = a[i]; // i从5到9时,i-5就是0到4,刚好是r数组的前5个位置

这样既不会越界,也能正确把a[5]~a[9]的值存到r[0]~r[4]里,l数组也不会被破坏了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 19:07:31