我最近拿起了 C,但對我們如何參考堆中分配的東西有點困惑。
例如,假設我們做了如下的事情:
void test(){
int *a;
a = (int*)(malloc(sizeof(int)*4));
a[0] = 1;
a[1] = 2;
a[2] = 0;
a[3] = 0;
}
現在,假設我在 main 中,顯然,我不能a[0]=...在函式之外做類似的事情,因為沒有對 的參考a,但它是在堆中分配的,那么我將如何參考它呢?我猜我必須int*將地址回傳或存盤到a函式外部。
uj5u.com熱心網友回復:
我猜我必須
int*將地址回傳或存盤到a函式外部。
是的,這正是它的作業原理。
malloc 為您分配一塊記憶體并回傳指向該記憶體塊第一個位元組的指標。
您必須確保始終保留指向記憶體塊的指標,直到您呼叫free它。
這可以通過從函式回傳指向它的指標來完成:
int* test(void){
int *a;
a = (int*)(malloc(sizeof(int)*4));
//... (Also check here that malloc didn't return NULL.)
return a;
}
或將其存盤在其他地方,例如傳遞給函式的輸出引數或全域變數。
如果您離開函式而沒有在任何地方存盤或回傳指標的副本,那么您會丟失指向記憶體塊 ( a)的最后一個指標,并且將無法再次訪問它。
后一種情況稱為記憶體泄漏。
將地址存盤到
a
它應該是地址通過舉行 a,而不是地址的 a。a的值是分配記憶體的第一個位元組的地址。的地址a是指標變數本身的地址。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/408993.html
標籤:
下一篇:交換兩個結構的元素
