C++从0到1全系列教程
1、用new动态创建一维数组
- 普通数组在栈上分配内存,栈很小;如果需要存放更多的元素,必须在堆上分配内存。
- 动态创建一维数组的语法:数据类型 *指针=new 数据类型[数组长度];
- 释放一维数组的语法:delete [] 指针;
注意:
- 动态创建的数组没有数组名,不能用sizeof运算符。
- 可以用数组表示法和指针表示法两种方式使用动态创建的数组。
- 必须使用delete[]来释放动态数组的内存(不能只用delete)。
- 不要用delete[]来释放不是new[]分配的内存。
- 不要用delete[]释放同一个内存块两次(否则等同于操作野指针)。
- 对空指针用delete[]是安全的(释放内存后,应该把指针置空nullptr)。
- 声明普通数组的时候,数组长度可以用变量,相当于在栈上动态创建数组,并且不需要释放。
- 如果内存不足,调用new会产生异常,导致程序中止;如果在new关键字后面加(std::nothrow)选项,则返回nullptr,不会产生异常。
- 为什么用delete[]释放数组的时候,不需要指定数组的大小?因为系统会自动跟踪已分配数组的内存。
2、示例代码
#include <iostream> // 包含头文件。
using namespace std; // 指定缺省的命名空间。
int main()
{
int *arr=new int[8]; // 创建8个元素的整型数组。
for (int ii = 0; ii < 8; ii++)
{
arr[ii] = 100 + ii; // 数组表示法。
cout << "arr[" << ii << "]=" << *(arr + ii) << endl; // 指针表示法。
}
delete[]arr;
}