- 堆内存分配与释放概述:
- 在C++中,使用
new
关键字进行堆内存分配,delete
关键字进行堆内存释放。当使用new
分配内存时,它会在堆上分配一块指定大小的内存,并返回一个指向该内存起始地址的指针。delete
则用于释放new
分配的内存,防止内存泄漏。
- 动态数组(存储整数)的创建、初始化、访问及释放代码示例:
#include <iostream>
int main() {
// 创建动态数组
int* dynamicArray = new int[5];// 在堆上分配5个整数大小的内存空间,返回指向该内存起始地址的指针
// 初始化动态数组
for (int i = 0; i < 5; i++) {
dynamicArray[i] = i * 2;
}
// 访问动态数组
std::cout << "动态数组元素: ";
for (int i = 0; i < 5; i++) {
std::cout << dynamicArray[i] << " ";
}
std::cout << std::endl;
// 释放动态数组内存
delete[] dynamicArray;
return 0;
}
- 指针在这个过程中的关键作用:
- 内存分配:
new
操作符返回一个指针,这个指针指向在堆上分配的内存空间。通过这个指针,程序能够找到并操作这块新分配的内存。例如,int* dynamicArray = new int[5];
中,dynamicArray
指针指向了堆上分配的5个整数大小的内存区域。
- 内存访问:指针使得程序能够通过数组下标语法(
dynamicArray[i]
)或者指针算术运算(*(dynamicArray + i)
)来访问动态分配数组中的元素。这是因为指针保存了数组在内存中的起始地址,基于这个起始地址和每个元素的大小(这里是sizeof(int)
),就可以计算出每个元素在内存中的位置。
- 内存释放:
delete
操作符接受一个指针作为参数,通过这个指针找到要释放的堆内存空间。在释放动态数组时,使用delete[]
并传入指向数组起始地址的指针(如delete[] dynamicArray;
),这样系统就能正确地释放整个动态数组占用的堆内存,防止内存泄漏。