new和delete

new和delete

C语言中使用的是malloc动态开辟内存,用free销毁内存。

//C语言malloc、free
int main()
{
	//①
	int *p1=(int *)malloc(sizeof(int));
	free(p1);
	//②
	int *p2 = (int *)malloc(sizeof(2));
	free(p2);
}

以上代码可以发现,①是malloc正常开辟和销毁的方法,②中可以发现是sizeof(2),int占4字节,但其实②中这两行代码实现的过程是不报错、可以运行成功的。但是如果修改成以下这样:

int *p2 = (int *)malloc(sizeof(2));

*p2 = 10; //error   

free(p2);

则会报错,因为会越界:mov dword ptr[p2],0ah

错误示例:

//错误示例
int main()
{
	int *p2 = (int *)malloc(2);
	int a = (int)p2;
	p2 = (int *)++a;
	free(p2); //error
}

C++语言中使用new动态开辟,delete释放内存

//C++使用new、delete
int main()
{
	int  *p3 = new int;//系统自动计算大小
	delete p3;
}

new和malloc的区别

1、new开辟的内存叫自主存储区域,malloc则在堆区开辟。

2、malloc()是一个函数,new是关键字。

3、malloc()无法初始化,仅仅开辟内存,new可以开辟内存并且初始化。

4、C语言如果开辟失败会报错,C++若开辟失败,抛出异常,终止程序。

5、常量开辟一定要初始化,否则无意义;malloc不能开辟常量内存,new可以。

 

开辟数组

//C语言
int *p1 = (int *)malloc(sizeof(int)*10);
free(p1);

//C++
int *p2 = new int[10];
delete [] p2;
//C++可以开辟内存并初始化
int *p3 = new int(10);
cout<<*p3;//10  开辟内存并初始化为10
delete p3;


//0初始化
int *p4 = new int[10]();
delete p4;

const int *p5 = new const int(10);
delete p5;

开辟二维数组

C语言方法:

//开辟二维数组
//C语言
int main()
{
	int **p1 = (int **)malloc(sizoeof(int *)*10);
    for(int i=0;i<10;i++)
   {
	   p1[i]=(int *)malloc(sizeof(int)*10);
   }
   for(int i=0;i<10;i++)
   {
	   free(p1[i]);
   }
   free(p1);
}

C++方法:

//C++
int main()
{
	int **p2 = new int*[10];
	for(int i=0;i<10;i++)
	{
		p2[i]=new int[10];
	}
	for(int i=0;i<10;i++)
	{
		delete [] p2[i];
	}
	delete []p2;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值