快捷搜索: 王者荣耀 脱发

动态内存分配(介绍和使用方法)

动态内存分配介绍

动态内存分配,顾名思义就是可以使我们更加灵活的分配和运用内存,动态内存的开辟的释放都是按照我们自身的需要进行的,我们通常直接使用的内存是在栈上的,开辟和释放内存都是由系统自动进行的,而动态内存分配的内存是在堆上。

那么使用动态内存的好处在哪?

在堆上开辟的内存,不会被系统自动释放,只能通过我们自己释放或者当程序结束的时候被自动回收,只要我们有指向由我们申请在堆上的空间的指针,我们就能对它进行修改数据和使用。

动态内存分配有关函数介绍

malloc

介绍:malloc函数作用是向堆申请空间

函数原型:void* malloc(size_t size)

void* malloc(想要向堆申请的内存空间大小,单位为字节) size_t等于int

特点:申请的空间不会被初始化

如果申请空间失败会返回空指针

calloc

介绍:calloc函数作用也是直接向堆申请空间

函数原型:void* calloc(size_t num,size_t size)

num:元素个数 size:元素类型大小

特点: 申请的空间会被初始化

如果申请空间失败会返回空指针

realloc

介绍:realloc函数可以调整在堆上的的空间大小

函数原型:void* realloc(void* p,size_t size)

p:在堆上空间的首地址 size:想要调整成的内存大小,单位为字节

特点:

一:申请的空间不会被初始化

二:如果申请失败会返回空指针

三:开辟成功,返回原来的地址,也可能返回新地址,因为要调整的空间的后面可能不够空间申请,因此要将整个原来的空间拷贝到新的地方进行调整,然后释放原来的空间内存,返回新地则

free

free函数用来释放内存

函数原型:void free(void* p)

p的值可以为NULL,free可以判断p是不是空指针

常见错误:

一:在申请堆上空间的时候,可能会申请失败而返回NULL,所以要先判断返回值是不是为空指针再赋值给指针变量

二:越界访问了堆上的内存

三:使用free释放非动态内存的空间

四:使用free释放一部分动态内存的空间

五:对同一块空间多次释放

六:长时间不使用堆上空间不释放,或者忘记释放。

经验分享 程序员 微信小程序 职场和发展