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

数组创建程序输入约8个整数后返回3221225477错误值求助

问题分析与修复方案

原代码的核心问题

  • 你使用的int array[n];是变长数组(VLA),它的大小在声明时就固定了,后续执行n++并不会真正扩大数组的内存空间。初始n=1意味着数组只有1个元素的存储容量,当i递增到1时,array[i]就会越界访问非法内存,输入约8个元素后触发内存访问错误,3221225477正是Windows系统下的内存访问违规错误码。
  • 关于你在第8行加&的错误:array[i]本身是数组的元素,属于可赋值的左值。如果写成&array[i] = input;,&array[i]是指向该元素的地址常量,不能作为赋值语句的左值,因此编译器会报“无效转换和左值错误”。

修复后的代码(动态内存实现)

用malloc和realloc实现动态扩容的数组,才能支持未知数量的元素输入:

#include <stdio.h>
#include <stdlib.h> // 引入malloc、realloc、free所需头文件

int main(){
    int input = 1;
    int i = 0;
    // 初始分配1个整数的内存空间
    int *array = malloc(sizeof(int) * 1);
    if (!array) { // 检查内存分配是否成功
        printf("内存分配失败\n");
        return 1;
    }

    while(input != 0){
        printf("Input a number (zero for end): ");
        scanf("%d", &input);
        
        if (input != 0) {
            array[i] = input;
            i++;
            // 动态扩容:重新分配能容纳i+1个元素的内存
            int *temp = realloc(array, sizeof(int) * (i + 1));
            if (!temp) { // 扩容失败时释放已分配内存,避免泄漏
                printf("内存扩容失败\n");
                free(array);
                return 1;
            }
            array = temp;
        }
    }

    printf("\nArray: ");
    // 用i遍历,i是实际输入的有效元素个数
    for(int j = 0; j < i; j++)
        printf("%d ", array[j]);
    
    free(array); // 释放动态分配的内存,防止内存泄漏
    return 0;
}

关键说明

  • malloc负责初始内存分配,realloc负责动态扩容,确保数组大小能随输入元素数量增长。
  • 每次内存分配/扩容后都要检查是否成功,避免内存不足导致程序崩溃。
  • 程序结束前用free释放动态内存,避免内存泄漏问题。
  • 遍历数组时用i(有效元素的计数),替代原代码中逻辑混乱的n。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 14:46:21