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

C语言动态分配数组空间时元素值约束不生效问题排查

问题成因
  • 校验逻辑顺序错误:你当前是先判断arr[i]的取值,再执行scanf给arr[i]赋值。但malloc申请的动态内存空间不会自动初始化,内存里存储的是无意义的随机垃圾值,提前校验未赋值的arr[i]会大概率触发>=1000的条件,导致程序提前异常退出,无法正常执行输入读取逻辑。
  • 额外存在内存泄漏问题:原代码未对malloc申请的动态内存做释放操作,不符合动态内存使用规范。
修复方法

调整循环内的执行顺序:先执行scanf读取用户输入赋值给arr[i],再校验arr[i]的取值是否符合约束,校验通过后再累加进sum,同时补充内存释放逻辑即可。

修复后的完整代码如下:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int n, i, sum = 0;
    int *arr;
    scanf("%d", &n);
    if (n >= 1000 || n <= 1)
    {
        return 0;
    }

    arr = (int *)malloc(n * (sizeof(int)));
    for (i = 0; i < n; i++)
    {
        scanf("%d", &arr[i]);
        // 赋值完成后再做值约束校验
        if (arr[i] >= 1000)
        {
            free(arr); // 退出前释放已申请的内存
            return 0;
        }
        sum += arr[i];
    }

    printf("%d", sum);
    free(arr); // 功能执行完成后释放动态内存
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 18:54:03