为什么malloc()初始化新分配的内存块的值?

为什么malloc()初始化新分配的内存块的值?,第1张

概述我开始学习C中的动态内存分配,到目前为止,我已经阅读过malloc()函数,并没有初始化新分配的块的值. 这是在较新版本的C中改变了吗? C99和C11? 我正在使用Xcode执行以下 *** 作,所有值都使用0进行初始化. double *p = (double *) malloc(5 * sizeof(double));printf("Address of p0 = %p | Valoe of p 我开始学习C中的动态内存分配,到目前为止,我已经阅读过malloc()函数,并没有初始化新分配的块的值.

这是在较新版本的C中改变了吗? C99和C11?

我正在使用Xcode执行以下 *** 作,所有值都使用0进行初始化.

double *p = (double *) malloc(5 * sizeof(double));printf("Address of p0 = %p | Valoe of p0 = %f\n",p,*p);printf("Address of p1 = %p | Valoe of p1 = %f\n",p+1,*(p+1));printf("Address of p2 = %p | Valoe of p2 = %f\n",p+2,*(p+2));printf("Address of p3 = %p | Valoe of p3 = %f\n",p+3,*(p+3));printf("Address of p4 = %p | Valoe of p4 = %f\n",p+4,*(p+4));

我认为这只适用于函数calloc().

解决方法 似乎是实现定义的行为.在Visual Studio 2012,C编译器上,我看不到这样的初始化.

更重要的是,请阅读此问题中所选答案的“捕获”:

Why does malloc initialize the values to 0 in gcc?

说,由于安全原因, *** 作系统可能会“给你”归零值.看起来,这是一个实现定义的行为.

建议:它不是标准行为,并且破坏了代码的可移植性.确保初始化值而不依赖于OS提供的数据.

总结

以上是内存溢出为你收集整理的为什么malloc()初始化新分配的内存块的值?全部内容,希望文章能够帮你解决为什么malloc()初始化新分配的内存块的值?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1221982.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存