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 這二十個位元組的儲存空間程式設計師無法手動程式設計釋放它 只能在本函式執行...