動態內存分配 傳統數組的缺點: 1數組長度必須事先制定,且只能是長整數不能是變量 2傳統形式定義的數組該數組的內存程序無法手動釋放 3數組一旦定義,系統就會為該數組分配的存儲空間就會一直存在直到該函數運行結束 4數組的長度不能再函數的運行的過程中動態的擴充或者縮小 5不能跨函數使用 為什麼需要動態分配內存 動態內存分配內存舉例——動態數組的構造 靜態內存分配和動態內存分配 跨函數使用內存的問題 #includevoid f(void) { int a[5]={0,1,2,3,4}//無法手動釋放要本函數運行完之後要系統釋放 } int main() { f(); } #incliude #include int main() { int i=5;/*靜態分配*/ /*分配八個字節p存儲首地址編號*/int *P=(int *)malloic(4);/* 第二個int *強制轉換成int型 *//*表示四個字節但是只用首地址表示*/ free(p);//free(p)表示把p所指向的內存給釋放掉 //p本身的內存是不能程序員手動釋放 }/*malloc只能呢過返回首地址*/ p本身所占的內存是靜態分配的 p是所指的內存的動態
//malloc函數學習動態內存分配 #includevoid f(int *q) { *q=200; 如果這裡寫free(p);則後面主函數中的無意義 } int main() { int *p=(int*)malloc(sizeof(int)) *p=10; printf("%d\n",*p); f(p); /*free(p);*/這樣也是錯的因為已經釋放內存 printf("%d\n",*p); } zhan存儲結構 堆分配 戰區 兌取