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

C++中使用new分配内存是否为连续分配?动态数组地址疑问

关于动态分配数组内存地址的误区

你的理解存在错误,不管是堆上动态分配的数组还是栈上的数组,元素的内存地址都遵循连续存储、按类型大小间隔的规则:

  • 对于代码 int* ptr = new int[5];,&ptr[0] 是数组第一个元素的地址,&ptr[1] 必然等于 &ptr[0] + sizeof(int)(也就是你例子中的 0x7fffa07f7564,因为int通常占4字节)。这是C++标准明确规定的,堆上的数组元素同样是连续存储的。
  • 你所说的“内存地址随机”,指的是数组整体的起始地址可能是随机的(比如堆分配的起始地址每次运行程序可能不同,栈上数组的起始地址也会受栈空间使用情况影响),但数组内部元素的地址一定是连续且按元素类型的字节数递增的。
  • 栈上的 int array[5]; 和堆上的 new int[5],在数组元素的内存布局上没有本质区别,都是连续的内存块,每个元素间隔 sizeof(int) 字节。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 17:44:53