首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >malloc清零内存?

malloc清零内存?
EN

Stack Overflow用户
提问于 2009-10-25 21:48:50
回答 6查看 12.9K关注 0票数 14

鉴于这段C代码是用gcc 4.3.3编译的

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>
#include <stdlib.h>


int main(int argc, char * argv[])
{

    int * i;

    i = (int *) malloc(sizeof(int));

    printf("%d\n", *i);
    return 0;

}

我希望输出是malloc()返回的内存中的内容,但实际上输出是0。malloc是否正在清零它返回的内存?如果有,原因何在?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-10-25 21:56:47

malloc本身不会清零内存,但许多操作系统会出于安全原因将您的程序请求的内存清零(以防止一个进程访问另一个进程使用的潜在敏感信息)。

票数 39
EN

Stack Overflow用户

发布于 2009-10-25 21:50:51

malloc()函数不会将分配的内存设置为任何特定值。如果要确保内存为零,请使用calloc()或等效的内存。否则,您将得到以前存在的内容(在您的情况下,可能为零)。

票数 9
EN

Stack Overflow用户

发布于 2009-10-25 22:03:35

分配的内存中的值是正式未定义的。C99声明:The malloc function allocates space for an object whose size is specified by size and whose value is indeterminate. malloc()可以做它想做的任何事情,包括将其置零。这可能是故意的,可能是实现的副作用,或者您可能只是有大量的内存恰好是0。

在OS上的FWIW和苹果的gcc 4.0.1我不能让它出来,甚至不是0,甚至做了很多分配:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for( idx = 0; idx < 100000; idx++ ) {
    i = (int *) malloc(sizeof(int));
    printf("%d\n", *i);
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1622196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文