記憶體分配小問題

2022-09-16 04:03:16 字數 778 閱讀 6219

前陣子抱著打醬油的心態去面試了一下學校裡某個俱樂部舉行的一次執委面試,沒想到被幾個小問題給卡住了。面試完後下了一天苦工終於把那些問題搞定了,呵呵,看來沒事多去面試一下還是有好處的,起碼知道自己哪些地方存在不足。這裡就說說其中一道關於c語言記憶體分配的問題。

看下面這個程式:

1

void allocmem(char **p)2;

4 *p =r;5}

678int

main()919

else

2023

24return0;

25 }

執行的結果是:

再看下面這個程式:

1

void allocmem(char **p)26

7int

main()818

else

1922

23return0;

24 }

執行的結果是:

這兩個程式的區別就是在allocmem()函式裡分配記憶體的方式不一樣,結果就是用區域性變數(陣列)分配的內存在函式呼叫結束後會被系統**,也就是說這種方式所分配的記憶體是在棧上;而是用malloc()分配的記憶體是在堆上,函式呼叫結束後不會被系統**,需要由程式設計師去釋放。

記憶體分配問題

乙個由c c 編譯的程式占用的記憶體分為以下幾個部分 1 棧區 stack 由編譯器自動分配釋放,存放函式的引數值,區域性變數的值等。其操作方式類似於資料結 構中的棧。2 堆區 heap 一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由os 注意它與資料結構 中的堆是兩回事,分配方式倒...

c 記憶體分配中乙個有趣的小問題

toc 以下 測試環境 vs2019 問題的提出 執行這麼一段 看看會發生什麼 c int arr 5 int main 毫無疑問,會報錯,因為訪問越界了。再看看另一段 c int arr 5 int main 與上面的 相比幾乎沒什麼差別,僅僅把arr的定義和初始化搬到了函式外面,但執行程式卻沒有...

c 記憶體分配問題

首先分為 區和資料區 資料區分為 靜態資料區,動態資料,動態資料區 堆區和棧區 區存放程式 靜態資料區 存放編譯時就分配記憶體的變數,生命週期貫穿整個程式執行過程,所有程式執行完畢後自動釋放。堆區 由程式猿安排分配和釋放的變數,通過malloc free.new delete管理。棧區 存放函式的形...