C語言學習筆記(五) 記憶體分配

2021-09-27 01:18:56 字數 938 閱讀 9811

void getmemory(char **p, int num)

void test1()

輸出內容:xmgcc

void test11()

char* getmemory2()

void test2()

函式返回位址都是不安全的,因為函式結束後,函式變數的記憶體都會變釋放,因此這個位址其他運用程式也可以用到,會被修改。

解決方法是char p="xmgcc"改為 static char p ="xmgcc"設為靜態

char *getmemory3()

void test3()

//正確,函式申請的內存在堆上,通過變數儲存函式返回所申請的記憶體的位址

char* getmemory4()

void test4()

//解決方法:char p[100]改為static char p[100]

void test5()

printf("%s\n", str);

}

分析錯誤原因:記憶體被釋放後,不能再對記憶體進行操作,需要將指標置為null,str=null

void getmemory6(char *p)

void test6()

//解決方法:通過函式引數獲取分配的記憶體,只能通過二級指標拿到

總結知識點:堆(malloc)是一直存在的,直到free,對應的指標依然指向該記憶體

棧:呼叫函式,由系統分配的,一般用於存放區域性變數,函式引數,等等

函式呼叫結束,棧裡的內容就被**

C語言學習筆記 動態記憶體分配

記憶體分割槽 說明 程式 區 code area 存放函式體的二進位制 靜態資料區 data area 也稱全域性資料區,包含的資料型別比較多,如全域性變數 靜態變數 一般常量 字串常量。其中 注意 靜態資料區的內存在程式結束後由作業系統釋放。堆區 heap area 一般由程式設計師分配和釋放,若...

C語言學習筆記 動態記憶體分配

1 c 語言中的一切操作都是基於記憶體的。2 變數和陣列都是記憶體的別名。記憶體分配由編譯器在編譯期間決定 定義陣列的時候必須指定陣列長度 陣列長度是在編譯期就必須確定的 3 但是程式執行的過程中,可能需要使用一些額外的記憶體空間 1 malloc 和 free 用於執行動態記憶體分配的釋放 2 m...

C語言學習 6 記憶體分配

一 傳統陣列的缺點 1 陣列的長度必須事先定製,且只能是常整數,不能是變數 intlen 5 inta len error 2 傳統形式定義的陣列,該程式的記憶體程式設計師無法手動釋放 include void f void 這二十個位元組的儲存空間程式設計師無法手動程式設計釋放它 只能在本函式執行...