0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

养成良好的编程习惯|堆内存初值不一定是0

学益得智能硬件 来源:学益得智能硬件 2024-12-18 09:14 次阅读

什么是良好的编程习惯?可以看下这段代码,有没有什么问题?

#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?

    请问下LM3433中Vadj是不是一定是需要大于0.3V,如果Vadj的电压小于0.3V,比如Vadj=0.25V,那么Vsense是等于0.3/16.667还是0.25/16.667?谢谢!
    发表于 09-04 06:16

    主板内存故障灯亮会是cpu的问题吗

    主板内存故障灯亮并不一定是CPU的问题,但CPU与内存之间的交互确实可能影响这故障现象。以下是对主板内存故障灯亮可能原因的分析:
    的头像 发表于 09-02 14:42 2684次阅读

    如何使用SystemView的监控功能

    SystemView能够监视应用程序如何使用动态存储。这意味着,如果应用程序中使用了C或C++、自定义或RTOS提供的内存池对象,我们可以跟踪这些对象的使用情况。SystemView可以在
    的头像 发表于 08-09 18:07 792次阅读
    如何使用SystemView的<b class='flag-5'>堆</b>监控功能

    LM723可调电路PCB板

    此板不一定与LM723可调电路相同,谨慎下载
    发表于 07-17 13:02 2次下载

    单相整流桥怎么测量好坏

    单相整流桥种常见的电子元件,主要用于将交流电转换为直流电。在测量单相整流桥的好坏时,需要掌握一定的方法和技巧。 、单相整流桥
    的头像 发表于 07-16 09:22 1008次阅读

    STM32H750DMA+SPi内存数据不一致的原因?

    发现用stm32H750 dma+spi读写数据时发现当spi速度大于8M时出现内存不一致的问题,我再读之前已经用SCB_CleanInvalidateDCache_by_Addr这个函数无效化内存了,速度小于8M时没有这个问题
    发表于 05-24 07:53

    大模型体机是在“卖盒子”吗?

    大模型不一定要捆绑硬件来凸显价值,但一定要结合硬件来充分释放价值
    的头像 发表于 05-15 09:55 1847次阅读
    大模型<b class='flag-5'>一</b>体机是在“卖盒子”吗?

    深度论证-高速走线控制100欧姆阻抗一定是最好的选择吗?

    分走线如果没有明确协议规定,那就按100欧姆来控制。很多工程师其实都不一定很清楚的知道内在的理论和原因,但是也会潜意识的控制100欧姆,可见100欧姆差分线这个观念是多么的深入人心! 但是,深入人心
    发表于 05-13 17:12

    7个编程习惯养成后年薪30万不是梦

    起工作的时间里,我注意到他们绝大部分人的些共通的编程和工作习惯。我想,或许正是这些习惯让他们成为了行业金字塔中最顶尖的那1%。01成为
    的头像 发表于 03-30 08:09 253次阅读
    7个<b class='flag-5'>编程</b><b class='flag-5'>习惯</b>,<b class='flag-5'>养成</b>后年薪30万不是梦

    鸿蒙APP开发:【ArkTS类库多线程】TaskPool和Worker的对比(2)

    创建Worker的线程称为宿主线程(不一定是主线程,工作线程也支持创建Worker子线程),Worker自身的线程称为Worker子线程(或Actor线程、工作线程)。每个Worker子线程与宿主线程拥有独立的实例,包含基础设施、对象、代码段等。
    的头像 发表于 03-27 15:44 527次阅读
    鸿蒙APP开发:【ArkTS类库多线程】TaskPool和Worker的对比(2)

    求助,给到USB OTG FS内核的时钟为什么一定是要48M呢?

    给到USB OTG FS内核的时钟为什么一定是要48M呢?
    发表于 03-22 11:26

    C语言内存泄漏问题原理

    内存泄漏问题只有在使用内存的时候才会出现,栈内存不存在内存泄漏问题,因为栈内存会自动分配和释放
    发表于 03-19 11:38 521次阅读
    C语言<b class='flag-5'>内存</b>泄漏问题原理

    负电荷的电场线一定是直线吗

    负电荷的电场线不一定是直线。在些特殊情况下,负电荷的电场线可能会呈现出曲线或弯曲的形态。为了详细解释这点,我将在以下几个方面进行论述。 电荷和电场 本部分将介绍电荷和电场的基本概念,以帮助读者
    的头像 发表于 02-26 15:18 805次阅读

    和栈的区别和使用注意事项

    和栈是在计算机科学中广泛使用的两种数据结构,它们具有不同的用途和特点。和栈的区别涉及到内存分配、访问方式、数据存储等方面。在使用和栈时,还需要注意
    的头像 发表于 01-18 17:24 2190次阅读

    自动驾驶地图研究:SD pro MAP快速上车,助力城市NOA轻地图智驾方案

    从自动驾驶的发展进程看,段时间内将持续处于人机共驾阶段,这个阶段对地图的需求并不一定是要高精度地图,针对不同地图互补特性整合的多源地图可能更适合该阶段的自动驾驶需求。
    的头像 发表于 01-04 16:09 1422次阅读
    自动驾驶地图研究:SD pro MAP快速上车,助力城市NOA轻地图智驾方案