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

C++用new创建动态数组输出异常:array[0]正常,array[1]输出地址

动态数组元素输出异常问题排查与解决

兄弟,我瞅了你的代码,逻辑上乍一看没啥问题,但array[1]输出内存地址而不是预期的4,大概率是这几个原因导致的:

  • 变量名引发的未定义行为:你用了_size作为变量名,在C++标准里,以下划线开头的标识符(尤其是全局作用域或者局部作用域中紧跟大写字母的)是保留给标准库使用的,虽然_size是小写开头,但仍然存在和标准库内部宏/变量冲突的风险,可能导致实际分配的数组大小不符合预期。比如如果_size被意外修改成1,那array[1]就属于越界访问,会读取到内存里的随机值(看起来像内存地址)。
  • 输入有效性未校验:你提到_size > 2,但如果std::cin >> _size执行失败(比如输入了非整数),_size的值会是未初始化的随机值,要是这个随机值小于2,同样会触发数组越界访问,输出随机内存内容。

修正后的代码示例

#include <iostream>

int main() {
    int size;
    std::cout << "请输入大于2的整数:";
    // 校验输入是否有效,确保size符合要求
    if (!(std::cin >> size) || size <= 2) {
        std::cerr << "输入无效!请输入大于2的整数。" << std::endl;
        return 1;
    }

    int* array = new int[size];
    array[0] = 13;
    array[1] = 4;

    std::cout << array[0] << std::endl;
    std::cout << array[1] << std::endl;

    // 记得释放动态分配的数组,避免内存泄漏
    delete[] array;
    return 0;
}

额外提醒

动态分配的数组一定要用delete[]释放内存,不然会造成内存泄漏。另外,日常写代码尽量避免用以下划线开头的变量名,减少踩坑的概率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 18:32:30