申请内存的几种方法 1、void * malloc(size_t size)//头文件#include<malloc.h> 解读:在堆区上申请size大小的空间,返回堆区上这个空间的起始地址申请空间是来连续的堆空间需要么memset初始化使用完需要释放free返回空间的首地址 如何使用: 如果直接解引用 malloc开辟失败会返回一个空指针 我们需要判断是否申请内存成功 代码:
2、void * calloc(int num,size_t size); calloc 初始化+开辟动态内存空间//头文件#include<malloc.h> 解读:在堆区上申请num个size大小的空间,返回堆区上这个空间的起始地址,并且把所有素初始化成0num:素数目,不需要memset申请到的是连续的堆空间,即申请num个大小为size的连续地址空间需要释放 代码
3、void * realloc(void * ptr, size_t new_size) realloc 调整动态内存空间大小 一段时间后,我们可能会觉得,之前申请的空间太小或者过大了,为了合理且灵活使用内存时,我们可以用realloc对动态内存空间进行大小的修改 //头文件 #include<malloc.h> realloc函数用于修改一个原先已经分配的内存块的大小,可以使一块内存的扩大或缩小。 当起始空间的地址为空,即*ptr = NULL,则同malloc。 当ptr非空:若nuw_size < size,即缩小ptr所指向的内存空间,该内存块尾部的部分内存被拿掉,剩余部分内存的原先内容依然保留; 若nuw_size > size,即扩大*ptr所指向的内存空间,如果原先的内存尾部有足够的扩大空间,则直接在原先的内存块尾部新增内存,如果原先的内存尾部空间不足,或原先的内存块无法改变大小,realloc将重新分配另一块nuw_size大小的内存,并把原先那块内存的内容复制到新的内存块上。因此,使用realloc后就应该改用realloc返回的新指针。 注意:再调用完realloc后就不能使用指向就内存的指针,而是用返回的新的指针。 代码:
小结 虽然动态内存空间使用很灵活,但我们还是需要注意以下常见的错误 对NULL(空)指针的解引用操作 对动态开辟空间的越界访问 对非动态开辟内存使用free释放 使用free释放一块动态开辟内存的一部分 对同一块动态内存多次释放 动态开辟内存忘记释放(内存泄漏) 三、 memset 名称:memset功能:初始化所指定的内存空间头文件:#include <stdlib .h>函数原形:void *memset(void *buffer,int c,int count);参数 :buffer 分配的内存c 初始化内容count 初始化的字节数返回值:返回指向buffer的指针 memset把buffer所指内存区域的前count个字节设置成某个字符的ASCLL值.一般用于给数组,字符串等类型赋值. 执行结果是10个0. 四、 memcpy 名称:memcpy功能:拷贝内存空间头文件:#include <stdlib .h>函数原形:void *memcpy(void *dest,void *src,unsigned int count);参数 :dest 目标内存区src 原内存区count 要复制的字节数返回值:指向dest的指针 memcpy会把src所指内存区复制count个字节到dest所指内存区.如果count比src字节数大,strcpy会拷贝’/0’后结束.要注意dest和src不要重叠. memcpy只是拷贝内存空间,不处理空间重叠的问题. 运行结果为5个0. 五、 memmove 名称:memmove功能:拷贝(移动)内存空间头文件:#include <stdlib .h>函数原形:void *memmove(void *dest,void *src,unsigned int count);参数 :dest 目标内存区src 原内存区count 要复制的字节数返回值:指向dest的指针 Memmove和函数memcpy函数功能一样,但只是拷贝内存空间,不处理空间重叠的问题.Memmove会处理空间重叠问题.当dest和src重叠时,仍能正确处理,但src内容发生改变. 六、 memmove 名称:memcmp功能:比较两个内存空间的字符头文件:#include <stdlib .h>函数原形:int memcmp(void *buf1,void *buf2,unsigned int count);参数 :buf1 内存区buf2 内存区count 要比较的字符数返回值:见下面 Memcmp会比较内存区域buf1和buf2的前count个字节.Memcmp回根据ASCLL码表顺序依次比较.当buf1<buf2时,返回<0;当buf1=buf2时,返回0;当buf1>buf2时,返回>0. 运行结果:p1<p2 原文链接: c语言内存操作函数汇总_pfgmylove的专栏-CSDN博客_内存操作函数 原文链接:https://blog.csdn.net/sigusoft_/article/details/ 原文链接:C语言 – 申请内存_wusu的博客-CSDN博客_c内存申请
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/36985.html