内存模型和名称空间
malloc和free
int * a = (int *)malloc(2*sizeof(int));
a[0] = 1;
cout<<a<<endl; //00A0E090
cout<<a[0]<<endl; //1
free(a);
cout<<a<<endl; //00A0E090
cout<<a[0]<<endl; //-572662307
new、new[]、delete、delete[]
与malloc类似new和new[]返回的均为指针
malloc不能对动态内存进行初始化但new和new[]可以
- new和delete
int *pi = new int (6); //对内置的int类型进行分配空间并初始化
int *pi = new int {
6}; //既可以用()也可以使用{}
delete pi; //释放内存
- new[]和delete[]
int *pi = new int[5] (6); //错误,只能对内置的数据类型进行,数组、结构体等均只能用{}
//例外:
int * pi = new int[5] (); //正确,将数组中的所有元素均初始化为0
int * pi = new int[5] {
}; //与上式等价
int * pi = new int[5] {
}; //与上式等价
int *pi = new int[5] {
6, 5, 4, 3}; //声明一个int数组,未初始化的元素默认初始化为0
delete [] pi //释放空间
栈
需要大量进行递归调用的函数中不要创建占用内存较大类型的局部变量,可能会引起栈溢出。