为什么malloc()初始化新分配的内存块的值?
发布时间:2020-12-16 10:40:44 所属栏目:百科 来源:网络整理
导读:我开始学习C中的动态内存分配,到目前为止,我已经阅读过malloc()函数,并没有初始化新分配的块的值. 这是在较新版本的C中改变了吗? C99和C11? 我正在使用Xcode执行以下操作,所有值都使用0进行初始化. double *p = (double *) malloc(5 * sizeof(double));pri
我开始学习C中的动态内存分配,到目前为止,我已经阅读过malloc()函数,并没有初始化新分配的块的值.
这是在较新版本的C中改变了吗? C99和C11? 我正在使用Xcode执行以下操作,所有值都使用0进行初始化. double *p = (double *) malloc(5 * sizeof(double)); printf("Address of p0 = %p | Valoe of p0 = %fn",p,*p); printf("Address of p1 = %p | Valoe of p1 = %fn",p+1,*(p+1)); printf("Address of p2 = %p | Valoe of p2 = %fn",p+2,*(p+2)); printf("Address of p3 = %p | Valoe of p3 = %fn",p+3,*(p+3)); printf("Address of p4 = %p | Valoe of p4 = %fn",p+4,*(p+4)); 我认为这只适用于函数calloc(). 解决方法
似乎是实现定义的行为.在Visual Studio 2012,C编译器上,我看不到这样的初始化.
更重要的是,请阅读此问题中所选答案的“捕获”: Why does malloc initialize the values to 0 in gcc? 说,由于安全原因,操作系统可能会“给你”归零值.看起来,这是一个实现定义的行为. 建议:它不是标准行为,并且破坏了代码的可移植性.确保初始化值而不依赖于OS提供的数据. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |