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

C++中两种数组动态内存分配方法的区别是什么?

两种C++动态数组分配写法的区别

首先说明:你给出的第二种写法存在语法顺序错误,标准C中合法的二级指针数组分配写法为int **ptr_arr = new int*[10];,如果直接写new *int[10]不符合C语法规范,编译阶段就会报错,属于类型书写顺序错误。以下基于正确的二级指针分配写法做对比:

  • 第一种 int *ptr_arr = new int[10];

    • 分配的对象:堆上连续的10个int类型元素,总大小为10 * sizeof(int)字节
    • 指针类型:返回值是首元素的int*类型地址,直接赋值给一级指针ptr_arr
    • 使用方式:可以直接通过ptr_arr[index]访问对应下标位置的int元素,本质是一维数组
    • 释放规则:直接调用delete[] ptr_arr即可完成全部内存释放,无需额外操作
  • 第二种(修正后)int **ptr_arr = new int*[10];

    • 分配的对象:堆上连续的10个int*类型(int指针类型)元素,总大小为10 * sizeof(int*)字节,此时这些指针还未指向实际的int存储区域
    • 指针类型:返回值是指针数组首元素的int**类型地址,赋值给二级指针ptr_arr
    • 使用方式:如果要存储实际int数据,需要额外为每个int*元素分配空间,例如循环执行ptr_arr[i] = new int[n],即可构成一个10行n列的二维int数组,通过ptr_arr[i][j]访问对应元素
    • 释放规则:需要先循环释放每一个int*指向的数组空间,再释放二级指针本身的空间,即先执行for(int i=0; i<10; i++) delete[] ptr_arr[i];,再执行delete[] ptr_arr;,否则会出现内存泄漏

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 04:18:02