这篇文章主要介绍“C语言动态内存分配函数如何使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C语言动态内存分配函数如何使用”文章能帮助大家解决问题。局部变量和函数的形参向栈区申请空间全局变量和static静态变量向静态区申请空间动态内存分配向堆区申请空间(位于或头文件)void* malloc (size_t size);分配内存块分配一个连续可用的字节内存块,返回指向该内存块开头的指针。新分配的内存块的内容未初始化,内存块中的数据为不确定值。免费云主机域名如果为参数为零,则返回值取决于特定的库实现(它可能是空指针,也可能不是空指针)。参数内存块的大小,以字节为单位。是无符号整数类型,size_t。返回值成功时,为指向函数分配的内存块的指针。此指针的类型始终为void*,可以将其转换为所需的数据指针类型。(C++由于其类型检查更为严格,则必须进行强制类型转换)如果函数未能分配请求的内存块,则返回空指针NULL。输出0 1 2 3 4 5 6 7 8 9void free(void* ptr);解除分配内存块1.若参数ptr指向的空间不是动态开辟的,那么free函数的行为是未定义的。2.若参数ptr是NULL指针,则free函数什么也不做。3.free只释放堆区空间,但ptr仍指向那块空间。所以使用完free后要将ptr置为NULL,切断ptr与该内存块的联系。参数指向要释放的那块空间的指针(必须指向初始位置)返回值无错误案例void* calloc(size_t num,size_t num);分配和零初始化内存块1.函数的功能是为num个大小为size的元素开辟空间。2.与malloc的区别只在于calloc会在返回地址前将申请的空间的每个字母初始化为0。void* realloc(void* ptr,size_t size);重新分配内存块1.ptr为要调整的内存空间,size为调整后的新大小2.返回值为调整后的内存块的起始位置注意事项1.若ptr指向的空间之后有足够的空间可以追加,则直接追加,然后返回ptr。2.若ptr指向的空间之后没有足够的内存空间,则realloc函数会重新找一块内存空间,开辟一块满足需求的内存空间,并且把原来内存中的数据拷贝过来,释放旧的内存空间,最后返回新开辟的内存空间的地址。1.对NULL指针的解引用操作(要进行返回值的判断)2.对动态开辟空间的越界访问3.对非动态开辟内存的空间的使用free进行释放4.使用free释放一块动态开辟内存的一部分(若指针位置发生变化,归位后再进行释放)5.对同一块动态内存的多次释放6.动态开辟内存忘记释放(内存泄漏)C99中,结构体中的最后一个元素是未知大小的数组,被称为柔性数组成员。特点1.结构体中柔性数组成员前必须至少有一个其他成员。2.sizeof返回的这种结构体的大小不包括柔性数组的内存大小。3.包含柔性数组成员的结构体用malloc函数进行内存动态内存的动态分配,并且分配的内存应大于结构体的大小,以适应柔性数组的预期大小。优势1.方便内存释放。2.利于访问速度,减少内存碎片。关于“C语言动态内存分配函数如何使用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注百云主机行业资讯频道,小编每天都会为大家更新不同的知识点。
相关推荐: php如何将二进制转为浮点型数
这篇文章主要介绍“php如何将二进制转为浮点型数”,在日常操作中,相信很多人在php如何将二进制转为浮点型数问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”php如何将二进制转为浮点型数”的疑惑有所帮助!接下来,请跟着小编一起来学…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。