小记:静默如初,安之若素
1.动态内存分配
笔试题:C中malloc() / free() 和C++中new / delete 的区别(堆区中的内存)
- C中的动态内存分配
1)分配: malloc()
2)释放:free()
3)错误处理:返回值 - C++中使用操作符动态分配内存(new的底层实现是malloc, delete 底层实现是free)
1)分配:new, new[]
2)释放:delete, delete[]
3)错误处理:异常机制
eg:C中动态分配一块内存,保存一个整型值
int *pi = (int *)malloc(4); //分配
*pi = 1234; //使用
...
free(pi);//释放
pi = NULL;
-----------------------------------
C++中动态分配一块内存,保存一个整形值
int *pi = new int;//分配,不需预先设定大小
*pi = 1234;
.....
delete pi;//释放
pi = NULL;
-----------------------------------
C中动态分配一块内存,保存10个整型值
int *pi = (int *)malloc(40); //分配
*pi = 1234; //使用
...
free(pi);//释放
pi = NULL;
-----------------------------------
C++中动态分配一块内存,保存10个整形值
int *pi = new int[10];//分配,不需预先设定大小
.....
delete[] pi;//释放
pi = NULL;
-----------------------
注:int 大小不少于short,不大于long
1 #include <iostream>
2 using namespace std;
3
4 int main(int argc, char * argv[])
5 {
6 int *pi = new int;
7 *pi = 1234;
8 cout<< *pi <<endl;//1234
9 delete pi;//防止内存泄露
10 pi = NULL;//防止野指针
11
12 //分配内存的同时初始化
13 int *pi2 = new int(4321);
14 cout<< *pi2 <<endl;//4321
15
16 (*pi2)++;//自增运算符的优先级高=>*pi2++会先++后*
17 cout<< *pi2 <<endl;//4322
18 delete pi2;
19 pi2 = NULL;
20
21 //new数组,数组申请内存会多申请4个字节,用来存储数组中申请元素的个数
22 int *parr = new int[10];
23 for(int i = 0; i < 10; i++)
24 {
25 parr[i] = i+1;
26 cout<< parr[i] <<' ';
27 }
28 cout<<endl;
29 delete[] parr;
30 parr = NULL;
31
32 //new数组同时初始化,c++11支持
33 int *parr2 = new int[10]{1,2,3,4,5,6,7,8,9,10};
34 for(int i = 0; i < 10; i++)
35 {
36 cout << parr2[i] <<' ';
37 }
38 cout<<endl;
39 delete[] parr2;
40 parr2 = NULL;
41
42 return 0;
43 }
笔试题:C中malloc() / free() 和C++中new / delete 的区别?(详细解释)