运用动态内存分配可以有效解决定义的数组或者结构体大小不够用的情况,动态内存分配就是人为的向系统申请一个指定大小的空间用来存放临时数据。在c语言中,一些可控或者说是一些小数据下,可以人为定义一些变量用来存放数据,在函数结束时释放掉,看起来很方便,其实很受限制,在一些不可控或者是大数据下的情况,我们无法得知我们需要多大的容量来存放他们,我们可以举个例子,一个电话簿中,一个联系人就是一个结构体变量,用来存放一些信息,但是这个电话簿有多少联系人呢?答案是若干个。我们不可能定义一个结构体数组来确定其容量,因为人数我们是不可控的,因此我们就引用了动态内存分配的概念,我们开始就初始化一个空间,可以存放比如就3个人吧,当要存放第4个人是就自动开辟一个指定大小的空间来存放联系人的信息,用完就开辟。
这里就要引用到2个函数,malloc函数,free函数。
malloc函数用法
void* malloc(unsigned int size)
其作用是向系统申请一个长度为size的连续空间,其返回值是所分配空间的第一个字节的地址,倘若开辟失败就会返回一个空指针,所以在使用时要对其返回值进行判断。
free函数用法
void free(void* p)
有借就有还,其作用是用来释放指针变量p所指向的动态空间,也就是归还这部分空间给系统,该函数无返回值,其余malloc函数成对使用。
开辟了空间用完后就要释放掉,用了malloc函数就要用free函数,倘若开辟了最后不释放的话,会造成内存泄漏。接下来举个例子:
最后再说一点,malloc这个函数很强,运用这个函数,几行代码就可以写一个恶意程序让你的电脑轻松崩溃,要是还加载到开机启动项里那你就重装系统吧,哈哈,小伙伴们可不要轻易尝试哦,要试也在自己电脑上试,毕竟友谊的小船说翻就会翻哦。