91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

養(yǎng)成良好的編程習慣|堆內(nèi)存初值不一定是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 申請一段堆內(nèi)存,假設內(nèi)存空間足夠大。

通過 getchar 配合 while 循環(huán),從標準輸入獲取一個字符串,直到遇到換行符結束。

最后就是把獲取的字符串輸出。

乍一看,好像程序沒什么問題。

然后把程序運行起來,多測試幾遍,也確實沒發(fā)現(xiàn)問題。

但是如果把代碼換個平臺,比如放到了 Windows 上,使用 DEV C++ 編譯器,再次運行,程序好像出了問題。

問題就出在了 malloc 函數(shù)上面。

malloc 用于申請堆內(nèi)存,但是堆內(nèi)存里面的內(nèi)容是不確定的。

剛才我們用的兩個編譯器,gcc 默認把堆內(nèi)存初始化成了 0,所以使用 getchar 獲取多個字符后,最后是 ?,是個標準的字符串。

而使用 dev C++,最后一個字符的后面并不是 ?,輸出也就出了問題。

良好的編程習慣就是使用內(nèi)存的時候盡量初始化,如果代碼這樣寫,不管移植到哪個平臺,都不會出問題。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 內(nèi)存
    +關注

    關注

    9

    文章

    3210

    瀏覽量

    76365
  • 編程
    +關注

    關注

    90

    文章

    3716

    瀏覽量

    97185
  • 代碼
    +關注

    關注

    30

    文章

    4968

    瀏覽量

    73965

原文標題:養(yǎng)成良好的編程習慣 | 堆內(nèi)存初值不一定是0

文章出處:【微信號:學益得智能硬件,微信公眾號:學益得智能硬件】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    面向視覺語言導航的任務驅動式地圖學習框架MapDream介紹

    在視覺語言導航(VLN)中,地圖長期作為獨立模塊構建,并通過固定接口交由導航策略使用。無論是BEV網(wǎng)格、拓撲圖還是語義記憶模塊,這些表示大多脫離策略學習而設計。結果是,機器人即使掌握場景的信息,也仍可能繞行甚至偏離目標,因為地圖中編碼的,并不一定是決定導航成功的關鍵信息。
    的頭像 發(fā)表于 03-02 10:40 ?339次閱讀
    面向視覺語言導航的任務驅動式地圖學習框架MapDream介紹

    curl中的TFTP實現(xiàn):整數(shù)下溢導致內(nèi)存越界讀取漏洞

    的條件:必須開啟 TFTP no options 模式,并且需要服務器將塊大小協(xié)商到個極小的值。 攻擊難度高 :利用該漏洞讀取到有價值信息(如密碼、密鑰等)的難度非常高。攻擊者很難精確控制內(nèi)存的布局
    發(fā)表于 02-19 13:55

    容易造成單片機內(nèi)存溢出的幾個陷阱介紹

    的函數(shù)遞歸調(diào)用的時候,大家盡量采用別的方式去代替。 區(qū):當申請了動態(tài)區(qū)域,用完的時候一定要記得釋放(free),如果沒有釋放,那么這塊內(nèi)存區(qū)域就將處于不可用狀態(tài)(就像占著茅坑不拉屎
    發(fā)表于 01-23 07:25

    C語言嵌入式系統(tǒng)編程注意事項-內(nèi)存操作

    啟動后第條要執(zhí)行的指令的位置。 記?。汉瘮?shù)無它,唯指令集合耳;你可以調(diào)用個沒有函數(shù)體的函數(shù),本質(zhì)上只是換個地址開始執(zhí)行指令! 數(shù)組vs動態(tài)申請 在嵌入式系統(tǒng)中動態(tài)內(nèi)存申請存在比
    發(fā)表于 01-04 07:31

    如何成為編程高手

    、多與別人交流   三人行必有我?guī)?,也許在次和別人不經(jīng)意的談話中,就可以迸出靈感的火花。多上上網(wǎng),看看別人對同問題的看法,會給你很大的啟發(fā)。   7、良好編程風格   注意
    發(fā)表于 12-29 06:57

    不同位數(shù)的CPU的變量所占的內(nèi)存

    )上述表格適用于KEIL C51 和 KEIL MDK兩個版本中,不一定適用于其它編輯器,具體內(nèi)容,請查看KEIL軟件手冊。 2)CPU的位數(shù)不能決定int占幾個字節(jié),int是個關鍵字,只能本編譯器
    發(fā)表于 12-09 07:30

    使用Keil MicroLIB時自動設置大小

    出錯。 忍無可忍,決定分析下微庫是怎么管理的。 首先打開項目編譯后生成的鏈接地址映射文件Linker Address Map,我們這里是SmartOSF0_Debug.map 找到符號表段
    發(fā)表于 12-09 07:04

    深度睡眠時為什么串口會發(fā)送一堆 \\0?

    RT,初始化串口,發(fā)送數(shù)據(jù)然后休眠,串口工具會收到CW32L010發(fā)送的一堆? ,AI統(tǒng)計了下 128個字節(jié),是什么原因???
    發(fā)表于 11-28 07:25

    和棧的區(qū)別

    個由C/C 編譯的程序占用的內(nèi)存分為以下幾個部分: 棧區(qū)(stack):由編譯器自動分配釋放 ,存放函數(shù)的參數(shù)值,局部變量的值等。其操作方式類似于數(shù)據(jù)結構中的棧。 區(qū)(heap):
    的頭像 發(fā)表于 11-27 18:13 ?1080次閱讀

    WebGL/Canvas 內(nèi)存泄露分析

    的 JavaScript 對象未釋放要復雜得多。個現(xiàn)代 WebGL/Canvas 應用的內(nèi)存版圖實際上跨越了三個截然不同但又相互關聯(lián)的內(nèi)存區(qū)域: 圖 V8 引擎管理的 JavaScript
    的頭像 發(fā)表于 10-21 11:40 ?408次閱讀
    WebGL/Canvas <b class='flag-5'>內(nèi)存</b>泄露分析

    串口DMA接收方式打開,為什么在開啟IDLE中斷的情況下還需要開啟DMA中斷呢?

    戶接口rx_indicate來讀取數(shù)據(jù),此時,串口收到的數(shù)據(jù)并不一定是完整的幀,破壞了使用IDLE中斷的意義。所以,為什么要開啟DMA中斷呢? 此處,可以看到不論是IDLE中斷還是DMA傳輸中斷,都會導致用戶回調(diào)的調(diào)用。
    發(fā)表于 09-29 08:30

    水泥廠料機與取料機無線連鎖控制解決方案實施案例

    在水泥廠的生產(chǎn)流程中,料機和取料機協(xié)同作業(yè)至關重要。某大型水泥廠的料區(qū)和取料區(qū)相隔一定距離,以往采用有線連接實現(xiàn)二者的連鎖控制,但隨著生產(chǎn)規(guī)模擴大和設備老化,問題頻發(fā)。
    的頭像 發(fā)表于 09-02 18:06 ?868次閱讀
    水泥廠<b class='flag-5'>堆</b>料機與取料機無線連鎖控制解決方案實施案例

    工業(yè)網(wǎng)關的內(nèi)存有什么功能

    工業(yè)網(wǎng)關的內(nèi)存是其核心硬件組件之,承擔著保障設備高效、穩(wěn)定運行的關鍵作用,具體功能可從以下幾個方面詳細說明: 、臨時數(shù)據(jù)存儲與處理 實時數(shù)據(jù)緩存:工業(yè)網(wǎng)關需要實時采集來自傳感器、PLC(可
    的頭像 發(fā)表于 08-15 10:15 ?581次閱讀

    等等黨不一定會贏,但小鵬G7一定會!

    行業(yè)資訊
    腦極體
    發(fā)布于 :2025年07月15日 15:50:41

    golang內(nèi)存分配

    內(nèi)存碎片. 線程擁有一定的 cache, 可用于無鎖分配. 同時 Go 對于 GC 后回收的內(nèi)存頁, 并不是馬上歸還給操作系統(tǒng), 而是會延遲歸還, 用于滿足未來的內(nèi)存需求. ?? ?
    的頭像 發(fā)表于 03-31 15:00 ?514次閱讀
    golang<b class='flag-5'>內(nèi)存</b>分配