C++动态内存分配

本文介绍了C++中的动态内存分配,包括静态内存分配的缺点和动态内存分配的优势。详细讲解了C语言中的malloc函数,C++中的new操作符以及如何使用free和delete释放内存。示例代码展示了动态内存分配与释放的过程。

C++动态内存分配

静态内存分配——分配固定大小内存

    缺点:大多数情況下会浪费内存空间,少数情况下可能引起下标越界。

动态内存分配——分配可变大小内存

    优点:不需要预先分配存储空间,分配的空间可根据程序需要扩大或缩小。    

一.C语言动态内存分配

♦ malloc函数malloc(unsigned int size)

函数在内存的动态存储区中分配一个长度为size的连续空间。其参数是一个无符号整形数,返回值是一个指向所分配的连续存储域的起始地址的指针。

当函数未能成功分配存储空间(如内存不足)就会返回一个NULL指针。所以在调用该函数时应该检测返回值是否为NULL并执行相应的操作。

示例1

void main()
{
    int count,*array;
    if((array = (int *) malloc(10*sizeof(int))) == NULL)
	{
		cout<<"不能成功分配存储空间"<<endl;
		exit(1);
	}
	for (count=0;count<10;count++)
		array[count]=count;
	for(count=0;count<10;count++) 
		cout<<array[count]<<endl;
	return;
}
♦ free函数:void free(void *p)

函数功能是释放指针p所指向的内存区。其参数p必须是先前调用malloc函数时返回的指针。如果给free函数传递其它的值很可能造成死机或其它灾难性的后果。

示例2

void main()
{
    int count,*array;
    if((array = (int *) malloc(10*sizeof(int))) == NULL)
	{
		cout<<"不能成功分配存储空间"<<endl;
		exit(1);
	}
	for (count=0;count<10;count++)
		array[count]=count;
	for(count=0;count<10;count++) 
		cout<<array[count]<<endl;
	free(array);//释放内存
	return;
}
二.C++动态内存分配

♦ 操作符new

返回一个指向内存块开始位置的指针。

示例3

	int n=5;
	int *p1;          //一级指针->指向一位数组
	int (*p2)[10];    //二级指针->指向二位数组
	int (*p3)[10][20];//三级指针->指向三位数组
	p1=new int[n];
	p2=new int[5][10];
	p3=new int[5][10][20];
    动态内存分配通常由操作系统控制,在多任务的环境中,它可以被多个应用共享,因此内存有可能被用光。如果这种情况发生,操作系统将不能在遇到操作符new 时分配所需的内存,一个无效指针(null pointer)将被返回。因此,在使用new之后总是检查返回的指针是否为空(NULL

示例4

	bobby =new int[5];
	if (bobby==NULL)
	{
		;//error assigning memory.Take measures.
	}

♦ 操作符delete

既然动态分配的内存只是在程序运行的某一具体阶段才有用,那么一旦它不再被需要时就应该被释放,以便给后面的内存申请使用。

delete操作符可以释放内存空间:delete [ ] pointer;

示例5

void main()
{
	int n=5;
	int *p1;          //一级指针->指向一位数组
	int (*p2)[10];    //二级指针->指向二位数组
	int (*p3)[10][20];//三级指针->指向三位数组
	p1=new int[n];
	p2=new int[5][10];
	p3=new int[5][10][20];
	delete []p1;
	delete []p2;
	delete []p3;
	int *bobby;
	bobby =new int[5];
	if (bobby==NULL)
	{
		;//error assigning memory.Take measures.
	}
	delete []bobby;
	return;
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值