当前位置: 首页 > news >正文

郑州做网站设计南城区网站仿做

郑州做网站设计,南城区网站仿做,wordpress随机注册,phpcms漏洞目录 引言 一、为什么要有动态内存分配#xff1f; 二、malloc 三、free 四、calloc 五、realloc 六、常见的动态内存错误 1、对 NULL 的解引用 2、对动态内存开辟空间的越界访问 3、对非动态内存开辟的空间使用 free 4、用 free 释放动态内存空间的一部分 5、对同…目录 引言 一、为什么要有动态内存分配 二、malloc 三、free 四、calloc  五、realloc 六、常见的动态内存错误 1、对 NULL 的解引用 2、对动态内存开辟空间的越界访问 3、对非动态内存开辟的空间使用 free 4、用 free 释放动态内存空间的一部分 5、对同一空间的反复释放 七、结语 引言 在编写高效且灵活的C语言程序时内存管理扮演着至关重要的角色。静态分配虽然简单易用但在面对变长数据结构和复杂需求时动态内存管理提供了更强的弹性。通过合理地申请、使用和释放内存我们不仅可以优化资源利用还能避免潜在的内存泄漏问题。本篇博客将带你全面了解C语言中的动态内存管理机制掌握相关的核心技术与实践技巧。 一、为什么要有动态内存分配 因为灵活。现实情况中有很多的不确定因素不确定的数量不确定的大小如果设置的容量小了不够用大了又会浪费空间这时候就绪需要用到动态内存来灵活的设置容量大小。 二、malloc 该函数包含在 stdlib.h 中它的原型如下 void* malloc(size_t size); 功能向内存的堆区申请一块连续可用的空间 返回如果申请成功则返回这块空间的地址 申请失败则返回 NULL 举个栗子 //向内存申请一块连续的能放下10个整型的空间 int* ret (int*)malloc(10 * sizeof(int)); //判断申请是否成功 if (ret NULL) {perror(malloc);return 1; } 注意malloc 的返回值为 void* 类型因此我们需要对齐强制类型转换转换为你想要的类型int* ,  char* 等等甚至结构体指针 三、free 该函数包含在头文件 stdlib.h 中它的原型如下 void free(void* ptr); 功能释放开辟的动态内存 无返回值 举个例子 //释放掉刚才开辟的空间 free(ret); ret NULL; //防止野指针 在我们用完一块空间后一定要记得释放不然指向该空间的指针被修改或者销毁那么你将永远找不到这块空间而这块空间还在占用你的内存 四、calloc  该函数包含在 stdlib.h 中它的原型如下 void* calloc(size_t num, size_t size); 功能为 num 个大小为 size 的元素开辟一块空间 返回成功返回空间地址失败返回 NULL 举个栗子 //向内存申请一块连续的能放下10个整型的空间 int* p (int*)calloc(10 ,sizeof(int)); //判断申请是否成功 if (p NULL) {perror(malloc);return 1; } //……使用 //释放 free(p); p NULL; 注意calloc 与 malloc 一样都用于开辟一块动态内存不同的是calloc 会给每个空间初始化为 0 而 malloc 不会  五、realloc 该函数也是包含在 stdlib.h 中它的原型如下 void* realloc(void* ptr, size_t size); 功能调整动态内存的大小 ptr 被调整的空间地址 size 调整之后的新大小单位是字节 返回成功返回调整之后的新地址 失败返回 NULL 举个栗子 //向内存申请一块连续的能放下10个整型的空间 int* p (int*)calloc(10 ,sizeof(int)); //判断申请是否成功 if (p NULL) {perror(malloc);return 1; } //调整大小为80个字节 int* p2 (int*)realloc(p, 40 40); //判断是否调整成功 if( p2 NULL) {perror(realloc);return 1; } p p2; //释放 free(p); p NULL; 这里为什么要用 p2 接收扩容后的空间呢 因为如果扩容失败realloc 就会返回 NULL如果用原来的 p 去接收那么 p 就被置为 NULL那么原来的那块空间就彻底跟你 say 拜拜了 那么realloc 的细节是什么真的是扩容吗 其实不是的realloc 只是申请一块新的空间然后把源空间的内容拷贝到新空间然后在返回新空间的地址 六、常见的动态内存错误 1、对 NULL 的解引用 平时大家肯定不会反这种错误但有时候 NULL 会伪装自己蒙蔽了广大学者的慧眼比如 int* p (int*)malloc(INT_MAX); for (int i 0; i 10; i) {p[i] i; } INT_MAX 是有符号int类型的最大值 21247483647 很大的一个数字就会让内存申请失败返回NULL而这时候在解引用就会报错 为了规避这种错误建议每申请完一个空间都要对齐判断是否成功 2、对动态内存开辟空间的越界访问 int* p (int*)malloc(10 * sizeof(int)); if (p NULL) {perror(malloc);return 1; } for (int i 0; i 10; i) {p[i] i; } 当 i 10 时越界访问 这个问题都是很常见的这里就不多说了 3、对非动态内存开辟的空间使用 free 注意free 只能释放动态内存空间也就是用 malloc calloc realloc 开辟出来的空间至于数组什么的都不可以 4、用 free 释放动态内存空间的一部分 int* p (int*)malloc(10 * sizeof(int)); p p 2; free(p); 这样也不可以free 必须接收该空间的首地址 5、对同一空间的反复释放 int* p (int*)malloc(10 * sizeof(int));if (p NULL){perror(malloc);return 1;}free(p);free(p); 这种也是不可以滴但是为了避免这种错误可以在每次释放后给 p 置为 NULL 七、结语 掌握C语言的动态内存管理不仅是写出高效程序的关键也是开发安全稳健软件的重要保障。善用malloc、realloc和free等函数我们可以灵活应对各种复杂场景实现资源的动态高效利用。在未来的编程旅程中让我们不断深入探索与实践成为内存管理的高手从而写出更加出色与安全的C语言程序。
http://www.hkea.cn/news/14372387/

相关文章:

  • 网站定制论坛百度托管运营哪家好
  • 长沙企业网站制作哪家好男生学什么技术最挣钱
  • 重庆忠县网站建设公司黑马培训是正规学校吗
  • 无锡 网站建设公司制作网页第一件事就是选定一种
  • 青岛网站建设康之迅中国建设银行信用卡黑名单网站
  • 江阴网站建设多少钱论述网站建设的主要内容
  • 企业建设营销网站的目的商城小程序多少钱
  • 阿里云服务器上如何做网站沈阳哪家网站做的好
  • 虹口高端网站建设苏州高端网站建设企业
  • 网站方案模板seo搜索引擎优化到底是什么
  • 凡科做的网站可以在百度搜到吗网站中的文章可以做排名吗
  • 企业门户网站的安全性石家庄企业建站
  • 自己建设网站平台步骤推广软文范文
  • 石家庄做外贸的网站建设简历制作免费模板网站
  • 深圳中小企业网站制作wordpress健身预定主题
  • 怎么看一个网站是不是外包做的基于 wordpress
  • 同服务器网站查询工具常州市城市建设局网站
  • 网站开发与制作工资分类信息发布 wordpress
  • 安徽省校园网站建设icp ip 网站备案查询
  • 黑龙江做网站的公司哪个网站可以做编程题
  • 门户手机网站模板写作网站可以签约未成年吗
  • 手机网站推荐一个互联网设计公司网站
  • 网站关键词做多了是不是影响权重重庆食品公司
  • 枣庄建设局网站上海装修公司排名前30
  • 网站开发安全有哪些做特卖的网站有哪些
  • 兰山网站建设2017网站建设前景
  • 电影网站建设视频教程购物网站建设规划书
  • 怎么上传网站模板电子商务seo优化
  • 建站企业网站惠阳惠州网站建设
  • 做网站排在前十名要多少钱推广产品的渠道有哪些