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

C语言自定义数组反转函数多次运行后首尾出现随机值是什么原因?

问题根因

你编写的reverse_array函数存在差一错误(off-by-one error),for循环的终止条件写错了:

for (reverse_index = size - 1; reverse_index > 0; reverse_index--)

当前的reverse_index > 0条件会让循环在reverse_index等于0时直接终止,完全漏掉了原数组下标为0的元素。这就导致输出的result数组的最后一个位置(下标为size-1)始终没有被赋值,保留了栈内存分配时的随机脏值,也就是你看到的32760这类异常值。

首次调用看似正常只是巧合:要么是第一次分配reversed数组时,栈上对应最后一个位置的脏值刚好和预期数值一致,要么是你第一次调用的print_array没有打印完整100个元素,掩盖了问题。连续多次调用后,不同栈位置的脏值不同,就会出现不同的异常值。

修复方案

只需要把for循环的终止条件改成reverse_index >= 0即可,确保原数组下标为0的元素也能被正常复制:

void reverse_array(int array[], int* result, int size) {
    int index = 0;
    int reverse_index;
    for (reverse_index = size - 1; reverse_index >= 0; reverse_index--) {
        result[index] = array[reverse_index];
        index++;
    }
}

小提示

边界判断错误是C语言开发中非常常见的低级错误,后续遇到类似的内存异常值问题时,可以优先检查数组遍历的起止条件是否覆盖了所有需要访问的下标。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 23:45:04