C++学习总结8--动态内存分配

小记:静默如初,安之若素

1.动态内存分配

笔试题:C中malloc() / free() 和C++中new / delete 的区别(堆区中的内存)

  1. C中的动态内存分配
    1)分配: malloc()
    2)释放:free()
    3)错误处理:返回值
  2. 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 的区别?详细解释

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值