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

免费源码资源站福州百度代理

免费源码资源站,福州百度代理,镇江网站制作案例,广东线上营销推广方案malloc、calloc 和 realloc 均为用于动态内存分配的标准库函数 1. malloc malloc 函数的作用是在内存的堆区分配指定字节数的连续内存空间,不过它不会对分配的内存进行初始化,也就是说,这块内存中的内容是未定义的。 函数原型:…

malloccalloc 和 realloc 均为用于动态内存分配的标准库函数

1. malloc

malloc 函数的作用是在内存的堆区分配指定字节数的连续内存空间,不过它不会对分配的内存进行初始化,也就是说,这块内存中的内容是未定义的。

函数原型:

void* malloc(size_t size);

参数 size 代表要分配的内存字节数,若分配成功,函数会返回一个指向分配内存起始地址的指针;若分配失败,则返回 NULL

示例代码:

#include <stdio.h>
#include <stdlib.h>int main() {int *ptr;// 分配4个int类型大小的内存空间ptr = (int*)malloc(4 * sizeof(int)); if (ptr == NULL) {printf("内存分配失败\n");return 1;}// 使用分配的内存for (int i = 0; i < 4; i++) {ptr[i] = i;}for (int i = 0; i < 4; i++) {printf("%d ", ptr[i]);}printf("\n");// 释放内存free(ptr);return 0;
}

2. calloc

calloc 函数的作用同样是在内存的堆区分配内存,与 malloc 不同的是,它会把分配的内存初始化为 0。

函数原型:

void* calloc(size_t num, size_t size);

参数 num 表示要分配的元素个数,size 表示每个元素的大小。若分配成功,函数会返回一个指向分配内存起始地址的指针;若分配失败,则返回 NULL

示例代码:

#include <stdio.h>
#include <stdlib.h>int main() {int *ptr;// 分配4个int类型大小的内存空间,并初始化为0ptr = (int*)calloc(4, sizeof(int)); if (ptr == NULL) {printf("内存分配失败\n");return 1;}// 使用分配的内存for (int i = 0; i < 4; i++) {printf("%d ", ptr[i]);}printf("\n");// 释放内存free(ptr);return 0;
}

3. realloc

realloc 函数的作用是对已分配的内存块大小进行调整,它可以扩大或者缩小已分配的内存空间。

函数原型:

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

参数 ptr 是指向之前分配内存的指针,size 是调整后内存的新大小。若 ptr 为 NULLrealloc 的行为和 malloc 一样;若 size 为 0,realloc 会释放 ptr 指向的内存,并返回 NULL。若分配成功,函数会返回一个指向新分配内存起始地址的指针;若分配失败,则返回 NULL

示例代码:

#include <stdio.h>
#include <stdlib.h>int main() {int *ptr;// 分配2个int类型大小的内存空间ptr = (int*)malloc(2 * sizeof(int)); if (ptr == NULL) {printf("内存分配失败\n");return 1;}// 使用分配的内存for (int i = 0; i < 2; i++) {ptr[i] = i;}// 调整内存大小为4个int类型大小ptr = (int*)realloc(ptr, 4 * sizeof(int)); if (ptr == NULL) {printf("内存重新分配失败\n");return 1;}// 使用调整后的内存for (int i = 2; i < 4; i++) {ptr[i] = i;}for (int i = 0; i < 4; i++) {printf("%d ", ptr[i]);}printf("\n");// 释放内存free(ptr);return 0;
}

区别总结

  • 初始化malloc 分配的内存不会被初始化,其内容是未定义的;而 calloc 会把分配的内存初始化为 0。
  • 参数malloc 只需要一个参数,即要分配的内存字节数;calloc 需要两个参数,分别是元素个数和每个元素的大小;realloc 需要两个参数,分别是指向已分配内存的指针和调整后内存的新大小。
  • 用途malloc 适用于需要分配内存但不需要初始化的场景;calloc 适用于需要分配内存并初始化为 0 的场景;realloc 适用于需要调整已分配内存大小的场景。

分配空间后是否初始化的影响

未初始化的影响(如 malloc

当使用 malloc 分配内存时,分配的内存块中的内容是未定义的。这意味着内存块中可能包含之前使用该内存区域时遗留下来的数据,这些数据是随机的,可能会导致程序出现难以调试的问题。

例如,如果你使用 malloc 分配一个整数数组,然后直接使用该数组中的元素,而没有对其进行赋值操作,那么这些元素的值将是不确定的。

#include <stdio.h>
#include <stdlib.h>int main() {int *arr = (int *)malloc(5 * sizeof(int));if (arr == NULL) {printf("内存分配失败\n");return 1;}// 未初始化直接使用for (int i = 0; i < 5; i++) {printf("%d ", arr[i]);}printf("\n");free(arr);return 0;
}

 

在这个例子中,arr 数组中的元素值是不确定的,每次运行程序可能会得到不同的输出结果。这可能会导致程序出现逻辑错误,因为你可能会基于这些随机值进行后续的计算或判断。

初始化的影响(如 calloc

当使用 calloc 分配内存时,它会将分配的内存块中的所有字节都初始化为 0。这使得内存块中的内容是可预测的,避免了使用未初始化数据带来的潜在问题。

例如,如果你使用 calloc 分配一个整数数组,那么数组中的所有元素都会被初始化为 0。

#include <stdio.h>
#include <stdlib.h>int main() {int *arr = (int *)calloc(5, sizeof(int));if (arr == NULL) {printf("内存分配失败\n");return 1;}// 已初始化为0for (int i = 0; i < 5; i++) {printf("%d ", arr[i]);}printf("\n");free(arr);return 0;
}

在这个例子中,arr 数组中的所有元素都会被初始化为 0,这样你就可以直接使用这些元素,而不用担心它们的值是不确定的。

calloc 分配后又置为 0 的意义

安全性

将分配的内存初始化为 0 可以避免使用未初始化数据带来的安全隐患。在一些安全敏感的应用中,如密码存储、加密操作等,如果使用未初始化的内存,可能会导致敏感信息泄露。通过将内存初始化为 0,可以确保不会有之前的敏感数据残留。

方便使用

在很多情况下,你可能需要一个初始值为 0 的数据结构。例如,当你创建一个计数器数组时,你希望数组中的所有元素初始值都为 0。使用 calloc 可以直接得到一个初始值为 0 的数组,而不需要额外的代码来进行初始化。

代码简洁性

使用 calloc 可以减少代码的复杂度。如果你使用 malloc 分配内存,然后再手动将内存初始化为 0,需要额外的代码来实现这一功能。而使用 calloc 可以将分配和初始化操作合并为一步,使代码更加简洁。

综上所述,是否对分配的内存进行初始化取决于具体的应用场景。如果需要使用初始值为 0 的数据结构,或者需要避免使用未初始化数据带来的潜在问题,那么使用 calloc 进行初始化是一个不错的选择。


文章转载自:

http://WZLAhPEg.qwzpd.cn
http://CzQuQjkj.qwzpd.cn
http://msTn6J7B.qwzpd.cn
http://vZhwTSTx.qwzpd.cn
http://tCChE0Q3.qwzpd.cn
http://f1Ce8NNT.qwzpd.cn
http://vZDEkJ84.qwzpd.cn
http://IS0dNHjf.qwzpd.cn
http://idHKtYbV.qwzpd.cn
http://RvMfuMwo.qwzpd.cn
http://iogWTDTt.qwzpd.cn
http://PJRRskfV.qwzpd.cn
http://PIvonIpO.qwzpd.cn
http://Ulm1Ike8.qwzpd.cn
http://KJzndhBH.qwzpd.cn
http://kt0g7dTp.qwzpd.cn
http://1VFb1PHx.qwzpd.cn
http://ZqP9SEUq.qwzpd.cn
http://ghYlJSIU.qwzpd.cn
http://wnCwjgAw.qwzpd.cn
http://0rkNzatH.qwzpd.cn
http://Ql3Yg2F9.qwzpd.cn
http://R7kZmrjV.qwzpd.cn
http://08aohXd8.qwzpd.cn
http://0L7KSKBj.qwzpd.cn
http://7c3sBbn3.qwzpd.cn
http://fHx8xfzq.qwzpd.cn
http://v5QXGrEZ.qwzpd.cn
http://BlFgn07b.qwzpd.cn
http://RlPEFIwy.qwzpd.cn
http://www.dtcms.com/wzjs/627031.html

相关文章:

  • 网站建设流程域名注册开源系统网站
  • 网站替换图片怎么做没有营业执照可以做网站吗
  • 域名建网站公司对于一个确定的网和设计方案
  • 制作网站哪家专业深圳口碑好的vi设计公司
  • 做网站毕业答辩会问什么万江仿做网站
  • 兰州 网站建设开发微信小程序商城
  • 技术支持 东莞网站建设企业网站标签页是什么
  • 做新闻类网站如何盈利昆明市建设局网站
  • 网站 后台 安装2021年十大购物网站排名
  • 自己做视频直播网站app开发网站建设前景
  • 网站建设全网推广小程序临沂网站制作报价
  • 宁波哪家建网站hao顺口大气三个字公司名字
  • 哪里有做ppt的网站网站建设费 科目
  • 天津网站推广外包wordpress仿qq空间模板
  • 做网站会提供源代码发布企业信息的网站
  • 兰州网站建设尚美网站关键词优化多少钱
  • 上海 网站建设公司汽车4s店网站模板
  • 产品定制网站开发joomla! 1.5 网站建设基础教程
  • 罗湖网站建设的公司网站页面怎么做地图
  • 东莞纸箱厂东莞网站建设长春火车站到吉大一院
  • 做网站guangxiyanda网站备案用座机租用
  • 做网站编辑有前途吗徐州做网站建设
  • 企业建站公司平台大连建设工程网站
  • ui的设计网站一二三四免费观看视频中文版在线
  • 电力网站建设方案赚钱黑渠道入口
  • dedecms手机网站制作专业团队图片张伟原图
  • asp网站建设实录pdf小说网站防盗做的最好的是
  • 巩义网站网站建设免费国内linux服务器
  • 怎么看网站有没有做301华为网站建设方案模板
  • 营销型网站页面布局网站建设域名怎么选择