C语言:
1.开辟内存:malloc() 使用malloc 缺点 : (1)、容易导致越界;例如:int *p = (int *)malloc(1); 明显指针大小为4字节,一个字节明显不够
(2)、 没有(不可以)初始化;
2.释放内存:free()
C++:
1.开辟内存:new + 类型; 例如:int *p = new int;
2.释放内存:delete + 开辟内存的变量名; 例如:delete p;
注意几点问题: C++数组只可以做'0'初始化:int *a = new int[10](); //初始化为0;
开辟常量类型一定要初始化:const int *a = new const int(10);
重定位new: int a;
char *p = new (&a) char('a'); //从a的内存中截取一字节给char 'a'使用,不用释放p的内存;
开辟数组内存:
1.一维数组:
C语言:int *a = (int *) malloc(sizeof(int)*10); 释放:free(a);
C++: int *a = new int[10]; 释放:delete [] a;
2.二维数组:
C语言:
int **a = (int**)malloc(sizeof(int*)*10); //a[10][10]大小
for(int i = 0;i<10;i++)
{
a[i] = (int *)malloc(sizeof(int)*10)
}
//释放二维数组时,先释放一维数组,再释放二维数组
for(int i=0;i<10;i++)
{
free(a[i]);//先释放一维指针
}
free(a);//最后释放我二维指针
C++:
int **a = new int*[10];
for(int i = 0;i<10;i++)
{
a[i] = new int[10];
}
//释放二维数组时,先释放一维数组,再释放二维数组
for(int i=0;i<10;i++)
{
delete (a[i]); //先释放一维数组
a[i] = NULL; //防止野指针
}
delete a; //再释放二维数组
a = NULL;
new和malloc的区别:
1.new是从自由存储区域开辟;malloc是从堆上开辟;
2.new的返回值类型安全;mallo返回值类型不安全;
3.new不需要计算内存的开辟大小;malloc需要计算开辟内存的大小;
4.new抛出异常(bad_alloc);malloc返回值为空;
5.new可以初始化;malloc不可以初始化;