什么是良好的編程習(xí)慣?可以看下這段代碼,有沒有什么問題?
#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)存,假設(shè)內(nèi)存空間足夠大。
通過 getchar 配合 while 循環(huán),從標(biāo)準(zhǔn)輸入獲取一個字符串,直到遇到換行符結(jié)束。
最后就是把獲取的字符串輸出。
乍一看,好像程序沒什么問題。
然后把程序運行起來,多測試幾遍,也確實沒發(fā)現(xiàn)問題。
但是如果把代碼換個平臺,比如放到了 Windows 上,使用 DEV C++ 編譯器,再次運行,程序好像出了問題。
問題就出在了 malloc 函數(shù)上面。
malloc 用于申請堆內(nèi)存,但是堆內(nèi)存里面的內(nèi)容是不確定的。
剛才我們用的兩個編譯器,gcc 默認把堆內(nèi)存初始化成了 0,所以使用 getchar 獲取多個字符后,最后是 ?,是個標(biāo)準(zhǔn)的字符串。
而使用 dev C++,最后一個字符的后面并不是 ?,輸出也就出了問題。
良好的編程習(xí)慣就是使用內(nèi)存的時候盡量初始化,如果代碼這樣寫,不管移植到哪個平臺,都不會出問題。
-
內(nèi)存
+關(guān)注
關(guān)注
8文章
3081瀏覽量
74592 -
編程
+關(guān)注
關(guān)注
88文章
3649瀏覽量
94343 -
代碼
+關(guān)注
關(guān)注
30文章
4857瀏覽量
69524
原文標(biāo)題:養(yǎng)成良好的編程習(xí)慣 | 堆內(nèi)存初值不一定是0
文章出處:【微信號:學(xué)益得智能硬件,微信公眾號:學(xué)益得智能硬件】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
DLP4500需要使用近紅外光源,如何判斷這個芯片是否適用?
TLK2201的數(shù)據(jù)端口對應(yīng)不齊是怎么回事?
C語言中申請的堆內(nèi)存能不能自動釋放
請問下LM3433中Vadj是不是一定是需要大于0.3V?
主板內(nèi)存故障燈亮?xí)莄pu的問題嗎
如何使用SystemView的堆監(jiān)控功能

單相整流橋堆怎么測量好壞
STM32H750DMA+SPi內(nèi)存數(shù)據(jù)不一致的原因?
深度論證-高速走線控制100歐姆阻抗一定是最好的選擇嗎?
7個編程習(xí)慣,養(yǎng)成后年薪30萬不是夢

鴻蒙APP開發(fā):【ArkTS類庫多線程】TaskPool和Worker的對比(2)

C語言內(nèi)存泄漏問題原理

評論