C语言/动态内存管理函数

        C程序运行时,内存将被划分为三个区域,而动态开辟的内存区间位于堆区。

C语言/动态内存管理函数_第1张图片

文章目录

前言

一、内存划分

二、malloc函数

三、calloc函数

四、realloc函数

五、free函数

总结


前言

在使用C语言编写程序时,使用动态内存是不可避免的,因此了解动态内存管理函数也是必要的。

本文讲了关于动态内存管理的四个函数的使用和注意事项。


一、内存划分

以下为C程序运行时,内存的划分图:

C语言/动态内存管理函数_第2张图片

二、malloc函数

该函数为C语言的动态内存开辟函数

void* malloc(size_t size);

注意事项:

  1. 开辟成功,返回一个指针,指向开辟好的空间;
  2. 开辟失败,返回NULL;
  3. 返回类型为void*,使用时需要用户根据需要修改数据类型;
  4. 若size为0,malloc的行为是未定义的,由编译器自己决定

三、calloc函数

该函数为C语言的动态内存分配函数

void* calloc(size_t num, size_t size);

num:元素个数;

size:字节大小。

注意事项:

  1. 开辟成功,返回一个指针,指向开辟好的空间;
  2. 开辟失败,返回NULL;
  3. 返回类型为void*,使用时需要用户根据需要修改数据类型;
  4. 若size为0,calloc的行为是未定义的,由编译器自己决定。

注:

        malloc申请到的空间,没有初始化,直接返回起始地址;

        calloc申请好空间后,会把空间初始化为0,然后返回起始地址。

四、realloc函数

该函数为C语言的对动态开辟内存大小的调整的函数

void* realloc(void* ptr, size_t size);

注意事项:

  1. 指针ptr指向的内存空间后,有足够的空间可以扩容,直接在后边续上新的空间,返回旧的起始地址
  2. 当后边没有足够的空间扩容时,realloc会找一个满足空间大小连续的空间。把旧的空间的数据拷贝新空间的前面的位置,并且把旧的空间释放掉返回新的空间的地址
  3. realloc扩容失败时,返回NULL。

五、free函数

专门做动态内存释放和回收

void free(void* ptr);

注意:

        ptr是指向一片连续堆区的内存空间。


总结

在使用完calloc|malloc|realloc函数之后,一定一定要记得使用free函数释放空间哦~

上述函数说明就是整个动态内存管理函数的全部啦,如果你有兴趣想要深入了解,可以通过写一个动态的通讯录理解它们C_Ccpp/C_study/contact at main · Yjun6/C_Ccpp (github.com)。

你可能感兴趣的:(C/C++,c语言,动态开辟函数)