数组创建程序输入约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
相关产品推荐
相关产品推荐

