C++中对new与delete的简单理解

C++中对new与delete的简单理解
我们可以知道,指针与数组具有相似性,但两者之间是有区别的,数组在定义时就根据指定的大小分配好了内存空间,而指针只是一个变量。那么如何给指针分配一片内存空间呢?
下面我们将介绍的new运算符可以实现这一功能,他与delete运算符一起使用,以达到直接进行动态内存分配和释放的目的。
·
·
运算符new返回指定类型的一个指针,如果分配失败(如没有足够的空间),则返回0.例如:

double *p;
p=new double;

系统自动根据double类型的空间大小开辟一个内存单元,并将地址放在指针p中。运算符delete操作是释放new请求到的内存,例如:

delete p;

·
·
需要注意以下几点:
**(1)**运算符delete必须用于先前new分配的有效指针,如果使用了未定义的其他任何类型指针,就会带来严重的问题,如系统崩溃。
·
**(2)**用new也可以指定分配内存的大小,例如:

int *p;
p=new int(60);//为指针开辟60个字节的内存单元
……
delete p;

·
**(3)**new可以为数组分配内存,但当释放时,必须告诉delete数组有多少个元素。例如:

int *p;
p=new int(10);
if(!p)
{
	cout<<"内存分配失败";
	exit(1);     //中断程序的执行
}
for(int i=0;i<10;i++)
p[i]=i;          //给数组赋值
……
delete [10]p;    //告诉delete数组有多少个元素

前面已经定义了数组【10】所以在删除delete的时候前面要加上【10】
·
·
·
【例题】分析下列程序的错误并且改正

#include<iostream>
#include<cstring.h>
void main()
{
	char *p;
	strcpy(p,"China!");
	cout<<p<<endl;
}

解答:在上述的程序中,但我们遇到char *p的语句时,给变量分配一个地址单元(在32位机上为4个字节),并没有分配p所指向的数据空间,并执行strcpy(p,“China”)语句时,并不能确定把字符串“China!”放在内存中的什么地方,因此程序会出现错误。
改正的方法是使用new先分配p所指向的内存空间,再将字符串放到这个内存空间中,并由p所指向第一个字符位置,修改后程序如下:

#include<iostream>
#include<cstring.h>
void main()
{
	char *p;
	p=new char[10];
	strcpy(p,"China!");
	cout<<p<<endl;
}

·
·
·
——文章转载至书本资料,仅用于个人学习
——2021年4月19日20:51

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值