关于malloc
时间:2011-11-29
来源:互联网
“ void *malloc(size_t size)
malloc函数为长度为size的对象分配内存,并返回指向分配区域的指针;若无法满足
要求,则返回NULL。该函数不对分配的内存区域进行初始化。”
我的疑问是,为什么在main()函数里
C/C++ code
int main() { int* p = (int*)malloc(4); std::cout<<*p<<std::endl;//结果输出的是0 }
为什么结果是0?不是指明malloc不对分配的内存区域不予初始化吗?
作者: gyongheng 发布时间: 2011-11-29
再者,是0不代表就一定初始化了。
作者: mougaidong 发布时间: 2011-11-29
可以回答一下,如果你做的都没有问题的话。
那就是IDE帮你做的事情,别以任何书籍为标准。
要以你使用的IDE为标准,毕竟开发IDE的这些厂商决定着编译的实现代码
而不是那些书,又或者那些C++国际标准。
作者: mymixing 发布时间: 2011-11-29
作者: nibiewuxuanze 发布时间: 2011-11-29
同楼上所述,该分配区域未初始化,只是其值恰巧为0而已。
不可能恰巧为0。
作者: mymixing 发布时间: 2011-11-29
我用的是vim编辑器和gcc(g++)
没有试过,不过针对楼主的问题。
可以回答一下,如果你做的都没有问题的话。
那就是IDE帮你做的事情,别以任何书籍为标准。
要以你使用的IDE为标准,毕竟开发IDE的这些厂商决定着编译的实现代码
而不是那些书,又或者那些C++国际标准。
作者: gyongheng 发布时间: 2011-11-29
烦请你指明你所指的“初始化”
你用Release版本看看结果是多少
再者,是0不代表就一定初始化了。
作者: gyongheng 发布时间: 2011-11-29
作者: namelij 发布时间: 2011-11-29
我多
> ./a.out
几次之后你保证不是0?
跟编译器没关系,只是恰好为0
作者: gyongheng 发布时间: 2011-11-29
我没有用IDE。
我用的是vim编辑器和gcc(g++)
好吧,那楼主知道IDE和编译器的区别吗?
你没有用IDE,至少得用编译器吧?
IDE难道是凭空编译的?
把你引用我的话中的IDE改成编译器 就OK了。
作者: mymixing 发布时间: 2011-11-29
作者: mymixing 发布时间: 2011-11-29
引用 5 楼 gyongheng 的回复:
我没有用IDE。
我用的是vim编辑器和gcc(g++)
好吧,那楼主知道IDE和编译器的区别吗?
你没有用IDE,至少得用编译器吧?
IDE难道是凭空编译的?
把你引用我的话中的IDE改成编译器 就OK了。
作者: gyongheng 发布时间: 2011-11-29
我都说gcc了.
行,你神了,你这意思GCC不用编译器就可以把C++代码转成机器码呗。
闪咯,你牛。
作者: mymixing 发布时间: 2011-11-29
引用 11 楼 gyongheng 的回复:
我都说gcc了.
行,你神了,你这意思GCC不用编译器就可以把C++代码转成机器码呗。
闪咯,你牛。
作者: gyongheng 发布时间: 2011-11-29
我就是纠结在“初始化”这三个字的具体含义上。
烦请你指明你所指的“初始化”
引用 1 楼 mougaidong 的回复:
你用Release版本看看结果是多少
再者,是0不代表就一定初始化了。
初始化 这个概念是在标准当中有规定的,不是我所指的。
其意思是,在你的进程中第一次为某一个变量对应的内存赋值。
作者: mougaidong 发布时间: 2011-11-29
-842150451
作者: vvviippp 发布时间: 2011-11-29
就拿我这里分配给p的4个字节,会进行简单的清除操作。
所以,给int,就输出0了。
初始化我是知道的。但是malloc明显不能初始化,但是作者又提出这个不能初始化,
我是没有个参考了才有这个疑问。
引用 6 楼 gyongheng 的回复:
我就是纠结在“初始化”这三个字的具体含义上。
烦请你指明你所指的“初始化”
引用 1 楼 mougaidong 的回复:
你用Release版本看看结果是多少
再者,是0不代表就一定初始化了。
初始化 这个概念是在标准当中有规定的,不是我所指的。
其意思是,在你的进程中第一次为某一个变量对应的内存赋值。
作者: gyongheng 发布时间: 2011-11-29
VS2005运行显示结果:
-842150451
作者: gyongheng 发布时间: 2011-11-29
作者: kf44444 发布时间: 2011-11-29
作者: menzi11 发布时间: 2011-11-29
内存中就没有恰好等于0这个数这一说,如果是一堆无意义的数字,那还可能是恰好。
那代表编译器什么都没做,直接取出一块内存,但如果是0这个数字的话,那只可能是编译器去额外做的工作。
另外楼主,你反复跟我强调GCC什么的,你觉得有意义么?
GCC是什么,还不就是编译器么。
看你17楼的回答,最后整句看来是跟环境有关系,不知道你认为这个环境是否是"编译器"呢?
作者: mymixing 发布时间: 2011-11-29
作者: kingstar158 发布时间: 2011-11-29
作者: zhao4zhong1 发布时间: 2011-11-29
大叔你说得是实现主存的物理特性。我知道。
但是我无法从你说得话归约到我想问的。
烦请详细讲解。鄙人菜鸟
难道楼主不知道RAM中每一个字节在电脑加电后都有值吗?
作者: gyongheng 发布时间: 2011-11-29
难道楼主不知道RAM中每一个字节在电脑加电后都有值吗?
作者: gyongheng 发布时间: 2011-11-29
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28