内存分配和释放

目录

 C语言分配和释放内存

分配

1.malloc函数

2.calloc函数

释放

malloc和free配合使用:

C++分配和释放内存

new运算符

delete运算符


 C语言分配和释放内存

分配

1.malloc函数

其函数原型为:

#include <stdlib.h>

void *malloc(size_t size);

其作用是在系统内存的动态存储区中分配一个长度为size字节的连续空间,并将此存储空间的起始地址作为函数值返回。

malloc函数返回值是指向void类型的,也就是不规定指向任何具体的类型。如果想将这个指针值赋值给其他类型的指针变量,应当进行显示转换(强制类型转换)。

分配的内存空间内容不确定,一般使用memset初始化。

如果内存缺乏足够大的空间进行分配,则malloc函数值为NULL。

2.calloc函数

其函数原型为:

void* calloc(unsigned int n,unsigned int size)

作用是分配n个长度为size字节的连续空间。返回值为该空间的首地址,如果分配不成功返回NULL。

calloc分配的内存初始化为0。

释放

在程序运行过程中,用户可以使用内存分配函数分配内存,这些内存因为是由用户自己申请分配的,所以在程序运行结束前,系统并不能自动收回该内存。为了避免内存的浪费,用户应该在使用完这些内存后主动把这些内存交还给系统。把申请的内存交还给系统的过程被称为释放内存。

free函数原型为:

#include <stdlib.h>

void free(void *ptr);

其作用是将指针变量ptr指向的存储空间释放,及交还给系统,系统可以另行分配其作用。对同一内存空间多次释放会出错。

需注意:因为系统可以另行分配其作用,所以不要再使用那个位置的内存,会出现不可预料的错误。

malloc和free配合使用:

int main()
{
	int* p = (int*)malloc(sizeof(int));
	if (p)
	{
		*p = 123;
		printf("%p\n", p);
	}
	free(p);
	int* p = NULL;
}

C++分配和释放内存

new运算符

new运算符用法:

new TYPE 【参数列表】 【初始化列表】

“【】”中的两个列表都是可选的,当省略前一个列表的时候,说明分配空间的new运算符只需要分配一个TYPE元素的内存空间;当省略了后面的列表时说明不使用参数对分配的内存进行初始化。

例:

	int* p = new int(123);
    float* p = new float(3.1415);
    char* p = new char[5];

 new和malloc的区别:

(1)new分配内存后返回的指针类型与分配时使用的数据类型相同。

(2)new分配内存时无需指定内存块的大小,编译器会根据类型信息自行计算。

(3)new内存分配失败不会返回NULL,而是抛出一个bac_alloc异常。

delete运算符

delete根据内存指针指向的地址释放内存,使用new分配的内存必须使用delete运算符释放,释放非数组内存delete用法如下:

delete 指针;

释放数组内存delete用法如下:

delete [ ]指针; 

例:

int main()
{
	int* p = new int(123);
	printf("%p\n", *p);
	delete p;
    p = nullptr;
}

 C++中定义的关键字nullptr代表空指针,防止发生指针误操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值