ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

C语言动态内存分配malloc、calloc、realloc

2020-05-25 19:07:03  阅读:262  来源: 互联网

标签:malloc realloc free C语言 地址 内存 动态内存 calloc


动态内存

根据需要动态创建需要的内存。例如根据变量创建数组,其内存区域在堆。这里简单提一下堆与栈

:局部变量所在的内存区域,在Windows默认其大小为1M,系统自行管理其内存(即你不用管回收问题)

:动态内存所在区域,默认大小为2G左右(不同平台有差别),程序管理内存,特别要注意内存释放

从以上栈与堆的大小可以知道,堆比栈大的多,所以动态内存还有一个使用场景,即需要创建大容量的数组时

malloc、calloc、realloc

malloc(字节数): 创建成功,函数返回一个指向分配起始地址的指针,失败返回NULL,内存数据为没有初始化的随机值

calloc(单元个数,每个单元的字节数): 创建成功,函数返回一个指向分配起始地址的指针,失败返回NULL,内存数据初始化为0

realloc(旧内存地址,新的内存字节大小): 用于修改动态内存的大小

注意:这三个是C语言表中库中的函数,使用时要引用头文件stdlib.h,返回的地址都是void*类型,要强制类型转换成你所要用的类型

malloc与calloc主要区别: 1.malloc内存数据未初始化,为随机值,calloc内存数据初始化为0,
2.malloc只有一个参数,calloc有两个参数,注意看他们的函数原型声明:void* malloc(unsigned size); void* calloc(size_t nelem, size_t elsize)

free

free(地址): 释放动态创建的内存,不释放会发生内存泄漏
free在使用的时候在以下情况会崩溃:1.越界(动态分配的内存太小)2.动态内存指针发生移动 3.重复释放

解释一下第二条动态内存指针发生移动导致free失败的原因
free函数只有一个参数,即分配的内存的首地址,它只用这一个信息就知道要释放多大的内存,这是因为动态分配的内存的那个首地址记录了它后边的分配的空间的大小的信息,因此只传给free函数内存首地址即可,若这个地址(指针)发生了移动,free就会崩溃。

标签:malloc,realloc,free,C语言,地址,内存,动态内存,calloc
来源: https://blog.csdn.net/huifaguangdemao/article/details/106295341

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有