无主之地2配置高吗|看真人裸体BBBBB|秋草莓丝瓜黄瓜榴莲色多多|真人強奷112分钟|精品一卡2卡3卡四卡新区|日本成人深夜苍井空|八十年代动画片

網易首頁 > 網易號 > 正文 申請入駐

手搓動態數組:內存分配與釋放的“責任狀”

0
分享至

  你手頭有五個整數,丟進一個 C 數組就完事了:int numbers[5] = {10, 20, 30, 40, 50};。編譯器在棧上劃出連續 20 字節,索引從 0 到 4,一切安好。可當用戶要加第六個整數,問題就來了——棧數組沒法伸縮。它的大小在編譯時就烙進了二進制,編譯器看到 5,算出 20 字節,你的函數棧幀里就這點地兒,沒得商量。你可以預先聲明 int numbers[1000] 賭一把夠用,但“希望”從來不是內存管理策略。

  變量長數組(VLA)也靠不住。雖然能寫 int numbers[n],但一旦進入函數,n 就固定了,本質還是棧上的一塊死空間。更要命的是,VLA 賴在棧上,而棧只有幾兆字節容量,塞一百萬個整數立刻炸棧,還沒有優雅的恢復手段。

  

  真正的解法活在堆上。庫調用 malloc 在運行時向操作系統伸手要內存,要多大給多大,只要物理內存撐得住。但它只給你一把原始字節和一根指針,沒有大小追蹤,沒有邊界檢查,沒有“我現在多滿?”的簿記。拿到內存的同時,也拿到了全部責任。這里就是每個動態數組的起點:不是精巧的數據結構,而是一道最基礎的簿記題——誰來記錄存了幾個元素?誰來記錄還能存幾個?誰保證用完把內存還回去?在 C 里,答案永遠是:你自己來。

  所以,第一步不是塞數據,而是建一份“元數據”。一個緊挨著數據的小結構體,專門記住這些簿記細節:

  typedef struct { int *data; // 指向堆上存放元素的緩沖區的指針 size_t size; // 已存儲了多少個元素 size_t capacity;// 緩沖區最多能容納多少個元素} IntArray;

  三個字段,恰是最低配的簿記。 data 指針來自 malloc(capacity * sizeof(int)) 的實際堆分配,當通過 arr->data[3] 訪問時,讀到的就是那塊分配區里的第四個整數。 size 追蹤用戶已經壓入了多少個元素,起始為 0;capacity 則是緩沖區能容納的總上限。從這里開始,一個最簡單、只容納整數、容量固定、只做“創建、壓入、銷毀”三件事的動態數組骨架就浮現了。沒有自動擴容,沒有泛型,沒有錯誤恢復,僅僅是后來一切擴展所依賴的原始骨骼。

  多數 C 教程略過兩個關鍵點,而這一通手搓會讓人徹底明白:一個是為何需要這個元數據結構體——因為 malloc 不記得任何事的,一旦弄丟容量信息,蟲子就爬進來了;另一個是調用 free 的順序為何生死攸關。釋放時,必須先把 data 指向的堆內存還掉,再釋放結構體自身,否則就會留下懸掛的野指針或直接泄漏。這個順序不是書本教條,是內存管理的天然律令。

  整段代碼的要害,不在于寫出多少行 C,而在于你承擔起 OS 和編譯器丟給你的那本“手工賬本”。每多壓一個元素,就得先問一句:還有空位嗎?每銷毀一次數組,就得先翻到最后一頁,把借來的緩沖區一張一張清干凈。這就是 C 語言里動態數組的真實起點——沒有黑箱,只有你自己。

特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相關推薦
熱點推薦
香會上美國防長一個字不提臺灣,臺當局的尷尬太平洋都裝不下了

香會上美國防長一個字不提臺灣,臺當局的尷尬太平洋都裝不下了

浪子的煙火人間
2026-05-31 01:30:03
利物浦臉都綠了!剛炒掉的冠軍主帥,轉頭被歐洲豪門搶著當救世主

利物浦臉都綠了!剛炒掉的冠軍主帥,轉頭被歐洲豪門搶著當救世主

瀾歸序
2026-05-31 02:44:49
78歲連路都走不穩還開演唱會,全網罵聲一片,她卻揚言回饋粉絲

78歲連路都走不穩還開演唱會,全網罵聲一片,她卻揚言回饋粉絲

二胡的歲月如歌
2026-04-14 18:43:51
“耿同學”永久限流后,南開大學、中山大學趁周末接連通報:多人遭免職

“耿同學”永久限流后,南開大學、中山大學趁周末接連通報:多人遭免職

藥識局
2026-05-30 21:11:23
蘋果五款新品曝光,6 月 9 日正式發布!

蘋果五款新品曝光,6 月 9 日正式發布!

XCiOS俱樂部
2026-05-30 20:40:52
《真人快打2》女星自曝為角色拼命:毫無武術基礎,開拍前瘋狂特訓

《真人快打2》女星自曝為角色拼命:毫無武術基礎,開拍前瘋狂特訓

赴一場山海啊
2026-05-30 01:20:38
《主角》大結局:繞了半輩子,憶秦娥終于回頭,看見老去的劉紅兵

《主角》大結局:繞了半輩子,憶秦娥終于回頭,看見老去的劉紅兵

君笙的拂兮
2026-05-29 22:24:03
干得太漂亮!馬英九正式提告蕭旭岑,鄭麗文:蕭職務、業務均不變

干得太漂亮!馬英九正式提告蕭旭岑,鄭麗文:蕭職務、業務均不變

小陸搞笑日常
2026-05-30 15:27:35
踩爆大陸底線!鄭麗文稱美國是“恩人”,訪美16天比訪華多三倍

踩爆大陸底線!鄭麗文稱美國是“恩人”,訪美16天比訪華多三倍

無情有思ss
2026-05-31 02:13:48
解雇斯洛特沒毛病,但利物浦的決策過程說明了一切

解雇斯洛特沒毛病,但利物浦的決策過程說明了一切

慢享生活集
2026-05-31 00:23:18
我在非洲干廢品回收,娶了一對姐妹,年賺三百萬,如今感覺快瘋了

我在非洲干廢品回收,娶了一對姐妹,年賺三百萬,如今感覺快瘋了

千秋文化
2026-05-01 19:00:05
兩性關系:男性過了75,不管跟誰處,牢記4句話,余生少心酸

兩性關系:男性過了75,不管跟誰處,牢記4句話,余生少心酸

匹夫來搞笑
2026-05-14 00:32:20
南通新任命兩名副市長

南通新任命兩名副市長

黃河新聞網呂梁
2026-05-30 11:22:54
德布勞內:孔蒂離任讓我由衷高興 我不喜歡保守踢法

德布勞內:孔蒂離任讓我由衷高興 我不喜歡保守踢法

球事百科吖
2026-05-31 04:17:20
暴漲27倍,一群華人賣Token:年入22億

暴漲27倍,一群華人賣Token:年入22億

人人都是產品經理社區
2026-05-29 18:00:01
七年統治夢碎!烏克蘭民眾親手選出的總統,終于將國家拖入深淵?

七年統治夢碎!烏克蘭民眾親手選出的總統,終于將國家拖入深淵?

阿器談史
2026-05-29 14:13:01
吳簽換了新工種!口紅一哥潛規則男主播?

吳簽換了新工種!口紅一哥潛規則男主播?

八卦瘋叔
2026-05-29 11:31:08
國際奧委會主席:我不贊成向參加奧運會的運動員支付報酬

國際奧委會主席:我不贊成向參加奧運會的運動員支付報酬

乒乓助手
2026-05-30 00:02:48
高市早苗與菲律賓總統一起唱歌比耶,并問“總統先生,要不要幫你介紹個音樂公司?”日本網民批:丟人現眼

高市早苗與菲律賓總統一起唱歌比耶,并問“總統先生,要不要幫你介紹個音樂公司?”日本網民批:丟人現眼

環球時報國際
2026-05-30 18:28:02
芒果高層聚會!副臺長汪涵腿夾手機蹺二郎腿,編外人何炅端坐似學生

芒果高層聚會!副臺長汪涵腿夾手機蹺二郎腿,編外人何炅端坐似學生

八卦王者
2026-05-30 14:36:55
2026-05-31 04:35:00
算力游俠
算力游俠
游走在API與報錯之間,用魔法(AI)打敗魔法的非硬核玩家。
4270文章數 34關注度
往期回顧 全部

科技要聞

車圈大佬發聲:價格戰遠去,但競爭仍殘酷

頭條要聞

兩名9歲女孩被困電梯近2小時 求救幾十次物業無動于衷

頭條要聞

兩名9歲女孩被困電梯近2小時 求救幾十次物業無動于衷

體育要聞

歲月不饒人!39歲德約鏖戰近5小時拼到嘔吐

娛樂要聞

張碧晨《歌手》 “活人微死” 自嘲

財經要聞

雙匯管不住一頭豬

汽車要聞

900V+3.2秒破百 領克10+&領克10上市16.99萬元起

態度原創

房產
手機
本地
健康
公開課

房產要聞

紅動五月!全國搶入核心資產,廣州盯緊凱旋新世界!

手機要聞

REDMI K90至尊版入網?K90單品激活破200萬

本地新聞

用剪紙的方式,打開江蘇揚州

嘗試干細胞療法如何避免踩坑?

公開課

李玫瑾:為什么性格比能力更重要?

無障礙瀏覽 進入關懷版