經典筆試題 動態記憶體管理

2021-08-11 07:31:44 字數 915 閱讀 5608

第一題:下面程式執行的結果是?

void getmemory(char *p)

void test(void)

答:程式崩潰。

因為 getmemory 並不能傳遞動態記憶體,test 函式中的 str 一直都是 null。strcpy(str, 「hello world」);將使程式崩潰。

指標變數傳參,其實是建立了乙個臨時變數,讓這個臨時指標變數指向malloc申請的空間,但str依舊指向null,執行strcpy時程式會崩潰。還有就是p申請後要free釋放,防止記憶體洩漏。

第二題:下面程式執行的結果是?

char *getmemory(void)

void test(void)

答:可能是亂碼。

因為 getmemory 返回的是指向「棧記憶體」的指標,該指標的位址不是 null,但其原現的內容已經被清除,新內容不可知。

第三題:下面程式執行的結果是?

void getmemory(char **p, int num)

void test(void)

第四題:下面程式執行的結果是?

void test(void)

}

解析:篡改動態記憶體區的內容,後果難以預料,非常危險。因為 free(str);之後,str 成為野指標,if(str != null)語句不起作用。

C語言的必看經典筆試題之(動態記憶體分配 !!!

1.3題目三 函式呼叫臨時變數的相關問題。找出錯誤,並糾正。void getmemory char p void test void int main 可以肯定的是以下兩個錯誤 1 沒有判斷空間申請是否成功。2 沒有釋放,會導致記憶體洩漏。還有呢?題目一解析 這裡傳入的是一級指標str,str裡存放...

面試題 動態記憶體管理

1.malloc void malloc size t size 用來向記憶體申請一塊連續可用的空間,並返回指向這塊空間的指標 1 開闢成功,返回乙個指向開闢好空間的指標 開闢失敗,返回乙個null指標,因此malloc的返回值一定要用assert檢查 2 返回值是void 所以malloc函式並不...

動態記憶體管理

首先應該明白物件的三種內部的儲存方式 自動儲存,靜態儲存,和動態儲存。當執行離開當期程式塊的時候,堆疊指標返回到它進入程式塊 之前的地方,有效的銷毀了那個程式塊的自動變數。重新進入這個塊會再次建立所有的自動變數。靜態物件宣告或者在檔案域中。動態物件是存在系統呼叫 的在執行期中建立並且儲存在堆中,這是...