C语言中malloc分配单个char内存的默认值是'P'吗?
malloc分配单个char内存的初始值是'P'吗?
测试代码
char *ptr = malloc(sizeof(char)); printf("\nValue of ptr: %d\n",ptr); printf("\nValue of address of ptr: %x\n",&ptr); printf("\nValue of pointed by ptr: %c\n",*ptr); printf("\nValue of address pointed by ptr: %x\n",&(*ptr)); *ptr='u'; printf("\nValue of pointed by ptr: %c\n",*ptr); printf("\nValue of address pointed by ptr: %x\n",&(*ptr));
运行输出
Value of ptr: 1046113600 Value of address of ptr: a2fffa78 Value of pointed by ptr: P Value of address pointed by ptr: 3e5a6d40 Value of pointed by ptr: u Value of address pointed by ptr: 3e5a6d40
问题
本人尝试使用malloc分配单个char大小的内存,并用指针指向该内存区域,打印该内存初始值时显示为'P',请问这是否意味着malloc分配单个char大小内存的默认值为'P'?
回答
当然不是,malloc分配的内存是未初始化的,里面的内容是随机的垃圾值。
malloc仅负责从堆内存中划出指定大小的可用区域,不会对这块内存做任何清零或初始化操作。你看到的'P'只是该内存地址之前被其他程序或当前程序的其他逻辑使用后遗留的字节数据(对应ASCII码值80)。- 换一台机器、换一个时机运行这段代码,甚至多次重复运行,你大概率会得到完全不同的初始字符,甚至是不可打印的乱码。
- 如果需要分配内存同时初始化为0,可以使用
calloc函数;若已用malloc分配内存,也可手动调用memset(ptr, 0, sizeof(char))完成清零。
内容的提问来源于stack exchange,提问作者NeuronB
相关产品推荐
相关产品推荐

