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

C++动态数组扩容后输入输出异常问题求助

动态数组扩容后输入输出异常问题分析

我正在做一个项目,其中必须用到动态数组。初始数组最多容纳5个元素,当用户输入的元素数量超过5时会执行扩容操作,但往扩容后的数组输入数据再尝试输出时,结果时好时坏,存在异常。以下是我的代码:

#include <iostream>
using namespace std;
int main()
{
int size = 5;
int classes;
//This is how I created the original array.
int* arr = { new int[size] {} };

//this is how my code is working right now
cout << "Enter the number of classes: ";
cin >> classes;
if(classes > size)  {
    size_t newSize = size * 2;
    int* resize_arr = new int[newSize];
    for (int i = 0; i < newSize; i++) {
        resize_arr[i] = arr[i];
    }
    size = newSize;
    
    delete[] arr;
    arr = resize_arr;

}
for(int i = 0; i < classes; i++)  {
   cin >> arr[i]
}

for(int i = 0; i < classes; i++   {
   cout << arr[i]
}
return 0;
}

问题根源及修正方案

  • 扩容循环越界访问:原扩容循环遍历newSize个元素,但原数组只有size个有效元素,访问arr[5]到arr[newSize-1]属于未定义行为,会读取垃圾值。应将循环条件改为i < size,只复制原数组的有效元素。
  • 语法错误:输入循环的cin >> arr[i]、输出循环的cout << arr[i]末尾缺少分号;输出循环的for语句中i++后缺少右括号,这些都会导致编译失败。
  • 单次扩容可能仍不足:如果用户输入的classes大于扩容后的size(比如输入12,初始size5扩容后是10),依然会出现数组越界。应改为循环扩容直到size >= classes。
  • 冗余初始化写法:int* arr = { new int[size] {} };中的大括号多余,直接写成int* arr = new int[size] {};即可。

修正后的代码

#include <iostream>
using namespace std;

int main()
{
    int size = 5;
    int classes;
    // 创建初始动态数组,初始化所有元素为0
    int* arr = new int[size] {};

    cout << "Enter the number of classes: ";
    cin >> classes;

    // 循环扩容直到数组容量足够
    while (classes > size) {
        size_t newSize = size * 2;
        int* resize_arr = new int[newSize] {}; // 初始化新数组元素为0
        // 仅复制原数组的有效元素
        for (int i = 0; i < size; i++) {
            resize_arr[i] = arr[i];
        }
        delete[] arr; // 释放原数组内存
        arr = resize_arr;
        size = newSize;
    }

    // 输入数据到数组
    for(int i = 0; i < classes; i++) {
       cin >> arr[i];
    }

    // 输出数组元素
    for(int i = 0; i < classes; i++) {
       cout << arr[i] << " ";
    }

    delete[] arr; // 记得释放动态分配的内存
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 08:00:54