动态内存管理之malloc函数

 引子:  

题外话:要学好1.指针,2.结构体,3.动态内存开辟,对于学习数据结构有帮助。

如今,我们在写代码的时候,会向电脑申请空间,而现在我们现在学过的申请空间的方式只有一个,一个是int(一小块一小块申请的),一个是int [ ](一大块一大块申请的)。

 不过,我们这种方法申请的空间是固定的,大小无法改变,不太方便。

在C语言中,我们有这个能力使我们所申请的内存大小可大可小,动态内存管理就是干这种事情的。其中在动态内存管理中最为核心的是malloc,calloc,ralloc,free。

接下来,我们来进行学习malloc函数。

在cplusplus.com中可以查到malloc函数的定义:

 进行查看后,使用malloc后,会开辟一个size大小的空间,返回一个指针指向内存块的起始位置。在申请空间的时候,会不会申请失败?在申请失败后,会返回一个空指针。如果size为0,malloc函数的行为标准是未定义的,取决于编译器。

free函数用来释放动态开辟的内存:1.如果参数ptr指向的空间不是动态开辟的,那free函数的行为是未定义的;2.如果参数ptr是NULL指针,则函数什么是都不做。

 

下面是编写代码进行使用malloc函数:

 介绍一下INT_MAX是什么?转到定义后是21亿多大。

 再来解释一下int申请的空间和malloc函数申请的空间在不同的区上:

malloc函数对应有free函数,在进行内存申请后需要将申请的空间进行释放,从而不会造成内存泄漏(通俗说,你借了一本书,但你没有换,这样别人也看不了)。而上述的代码中没有free,并不是说内存空间就不回收,当程序退出的时候,系统会自动回收内存空间的。

free函数是用来释放申请空间的。在释放完空间后,p还指向malloc函数返回的地址,如果不将p指向空,则p会成为野指针。

malloc和free尽量成对出现,防止内存泄漏。

现在在进行编写死循环申请空间,电脑不会无节制的给予空间,不会使电脑死机,如果有一个需要跑7乘24小时的程序中出现内存泄漏是很可怕的,需要过几天重启系统。 

猜你喜欢

转载自blog.csdn.net/2301_77868664/article/details/130837228