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

C++向数组中插入整数时出现意外输出结果的问题求助

问题成因

C++ 中的普通固定长度数组必须在定义时明确指定长度,你写的int MyArray[]={};相当于定义了一个长度为0的数组,没有预留任何存储元素的空间。后续往MyArray[i]赋值的操作属于数组越界访问,直接改写了数组后方不属于它的内存区域,属于未定义行为:

  • 前两次赋值可能刚好碰到未被占用的内存,暂时看起来运行正常
  • 到第三次赋值时,改写的内存刚好对应循环变量i或者栈上其他控制数据的存储区域,导致变量值被篡改,程序就会出现异常输出甚至直接崩溃。

修复方案

有两种常用的修复方式:

方案1:预先分配足够大的固定长度数组(适合明确知道最大存储上限的场景)

把数组定义改成指定足够大的长度,同时增加输入上限判断避免越界,示例代码如下:

#include <iostream>
using namespace std;

int main(){
    const int MAX_SIZE = 100; // 预先定义最多存储100个元素
    int i=0;
    int num;
    int MyArray[MAX_SIZE] = {};
    
    while (i < MAX_SIZE) { // 增加边界判断避免越界
        cout << "sayi giriniz" << endl;
        cin >> num;
        MyArray[i] = num;
        i++;
        
        for (int j=0; j<i; j++) {
            cout << MyArray[j] << endl;
        }
    }
    cout << "已达到最大存储上限,程序退出" << endl;
    return 0;
}

方案2:使用C++标准库的动态数组vector(推荐,不需要提前预知元素数量)

vector会自动管理内存、动态扩容,不需要手动指定长度,可完全避免数组越界问题,示例代码如下:

#include <iostream>
#include <vector> // 引入vector头文件
using namespace std;

int main(){
    int num;
    vector<int> MyArray; // 定义int类型动态数组
    
    while (true) {
        cout << "sayi giriniz" << endl;
        cin >> num;
        MyArray.push_back(num); // 往数组末尾添加元素,自动完成扩容
        
        for (int j=0; j<MyArray.size(); j++) { // 用size()方法获取当前元素个数
            cout << MyArray[j] << endl;
        }
    }
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 19:06:04