什么是良好的编程习惯?可以看下这段代码,有没有什么问题?
#include#include int main() { char*s=(char*)malloc(1024); char ch; int i = 0; while ((ch = getchar()) != ' ') { *(s + i++) = ch; } printf("%s ", s); return 0; }
代码很简单,使用 malloc 申请一段堆内存,假设内存空间足够大。
通过 getchar 配合 while 循环,从标准输入获取一个字符串,直到遇到换行符结束。
最后就是把获取的字符串输出。
乍一看,好像程序没什么问题。
然后把程序运行起来,多测试几遍,也确实没发现问题。
但是如果把代码换个平台,比如放到了 Windows 上,使用 DEV C++ 编译器,再次运行,程序好像出了问题。
问题就出在了 malloc 函数上面。
malloc 用于申请堆内存,但是堆内存里面的内容是不确定的。
刚才我们用的两个编译器,gcc 默认把堆内存初始化成了 0,所以使用 getchar 获取多个字符后,最后是 �,是个标准的字符串。
而使用 dev C++,最后一个字符的后面并不是 �,输出也就出了问题。
良好的编程习惯就是使用内存的时候尽量初始化,如果代码这样写,不管移植到哪个平台,都不会出问题。
-
内存
+关注
关注
8文章
3020浏览量
74008 -
编程
+关注
关注
88文章
3614浏览量
93693 -
代码
+关注
关注
30文章
4780浏览量
68535
原文标题:养成良好的编程习惯 | 堆内存初值不一定是0
文章出处:【微信号:学益得智能硬件,微信公众号:学益得智能硬件】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
请问下LM3433中Vadj是不是一定是需要大于0.3V?
主板内存故障灯亮会是cpu的问题吗
如何使用SystemView的堆监控功能

单相整流桥堆怎么测量好坏
STM32H750DMA+SPi内存数据不一致的原因?
深度论证-高速走线控制100欧姆阻抗一定是最好的选择吗?
鸿蒙APP开发:【ArkTS类库多线程】TaskPool和Worker的对比(2)

负电荷的电场线一定是直线吗
堆和栈的区别和使用注意事项
自动驾驶地图研究:SD pro MAP快速上车,助力城市NOA轻地图智驾方案

评论