数据结构预备知识4--malloc,free

malloc:

malloc是什么:

malloc是一个函数,用于开辟空间时使用。其头文件在于malloc.h和stdlib.h。

malloc的使用:

格式为:(指针类型 *)malloc(sizeof(指针类型));

如果说我们所要开辟的空间有 n 个,则在sizeof前乘以相应的个数。 

#include<iostream>
using namespace std;
int main()
{
	int* a;
	a = (int*)malloc(30 * sizeof(int));

	return 0;
}

如果上述过程a开辟成功则指向开辟的空间,反之则返回NULL指针。

我们用以下方式对我们上述代码进行检测。

 

#include<iostream>
using namespace std;
int main()
{
	int* a;
	a = (int*)malloc(sizeof(int));
	cout << "开辟空间后:   ";
	if (a == NULL) {
		cout << -1 << endl;
	}
	else {
		cout << 1 << endl;
	}
	return 0;
}

bad94b6e40904476811aa0cc3be09380.png

free:

free是什么:

free也是一个函数,其作用与malloc相反,用于释放空间时使用。其头文件在于malloc.h和stdlib.h。

free的使用:

free的格式:free(变量名);

最后要将其变为NULL,否则则为一个空指针。

free(a);
a=NULL;

 

 

我们为什么需要malloc、free:

当我们在存放数据时,为了使我们的内存适当而存在,不够则利用malloc进行空间的开辟,当我们删除一个数时则利用free来释放空间。

补充:

new:

在C++中我们有时会使用new来代替malloc进行使用。

定义非数组时:

int * a = new int ;//只定义没有初始化
int * b = new int (3);//给b初始化值为3;

 定义数组时:

int * c = new int[3];//定义了一个数量为3的数组

delete:

delete用于释放new所创造的内存。

释放非数组时:

delete a ; 
a = NULL ;

释放数组时:

delete [] c ;
c = NULL ;

new和malloc的区别(了解): 

1、new/delete是C++的操作符,而malloc/free是库函数;

2、new在调用时会先为对象分配内存,再调用对象的构造函数,而malloc不会

3、使用malloc为对象指针分配内存,要明确指定分配内存的大小,而new不需要

4、new作为操作符,可以被视为重新定义,而malloc不行

5、new分配内存成功,则返回对象指针;而malloc分配成功会返回void*类型指针

6、new如果分配内存失败会抛出bad_alloc异常;而malloc分配内存失败会返回NULL指针

7、new从自由存储区为对象分配内存;malloc从堆上分配(堆区在未初始化的数据区之后开始)内存

 

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木兮xg

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值