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

C数组访问越界:Serial输出非定义数值的问题排查

问题分析与解决方案

你的问题核心是数组越界访问,导致读取到未定义的随机数值,具体原因和修正方法如下:

错误原因

你定义的数组int freq[] = {1000, 10000, 30000}只有3个元素,合法索引范围是0、1、2。但你的for循环条件设置为count < 6,这会让循环执行6次(count从0到5)。当count等于3、4、5时,freq[count]会访问数组边界之外的内存区域——这些内存中的内容是未初始化的随机数据,所以串口监视器会输出你没定义的数值。

修正方案

方案1:直接匹配数组元素数量修改循环条件

把循环的终止条件改成count < 3,和数组实际元素数量一致:

for (byte count = 0; count < 3; count = count + 1) {
    Serial.print("current Frequency(hz): ");
    Serial.println(freq[count], 4);
}

方案2:动态计算数组长度(更灵活)

如果后续可能修改数组元素数量,用sizeof自动计算数组长度,避免手动维护循环条件:

// 计算数组元素个数:数组总字节数 ÷ 单个元素的字节数
byte freqCount = sizeof(freq) / sizeof(freq[0]);
for (byte count = 0; count < freqCount; count++) {
    Serial.print("current Frequency(hz): ");
    Serial.println(freq[count], 4);
}

这样不管你后续给数组添加或删除多少个频率值,循环都会自动适配,不会再出现越界问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 17:03:20