動態記憶體空間初始化方式的比較

2021-09-06 10:29:20 字數 761 閱讀 5259

動態記憶體空間初始化方式的比較

1. 通過下標的方式進行初始化;

2. 通過移動指標來進行初始化;

/****************** 下標方式 ******************/

#include #include int main(void)

free(p);

return 0;

}

/****************** 移動指標方式 ******************/

#include #include int main(void)

free(p);

return 0;

}

就其目的而言,兩種方式都可以對動態申請的記憶體空間進行初始化,但是很明顯第一種方式(下標方式)比第二種方式(移動指標方式)方便,也更安全。原因:在第二種方式(移動指標方式)中,如果直接移動定義的指標變數,在最後釋放記憶體空間的時候,可能就忘記將指標位置移動到初始化時的位置(當然,也不推薦使用這種方式),而直接將這個指標傳給free(void *pointer)來釋放空間,然而,此時的指標位置已經變化,不再是那段記憶體空間的首位址,所以在釋放記憶體時將導致執行時錯誤。為了解決這個問題,我們需要定義乙個臨時指標變數,使其指向原來指標所指向的位置,然後使用這個臨時指標變數對記憶體空間進行初始化,最後將原來的指標傳給free(void *pointer)來釋放記憶體空間。

所以,我覺得對動態申請的記憶體空間進行初始化時使用下標法比較好!

物件記憶體空間分配與初始化

在c 中,乙個變數可以在某個程式範圍內的任何地方定義,所以在這個變數的定義之前是無法對它分配記憶體空間的。通常,c 編譯器可能像c編譯器一樣,在乙個程式塊的開頭 就分配所有的記憶體。這些對我們來說是無關緊要的,因為作為 乙個程式設計師,我們在變數定義之前總是無法得到儲存空間的。即使儲存空間在塊的一開...

初始化指標是否需要分配記憶體空間

初學指標,不知道聲名指標或者聲名物件時為什麼要用new來分配記憶體空間,如以下 int a int b 2 a b cout a a 此處輸出結果為 a 2 而再看如下 int a int b 2 a b cout a a 執行時編譯器會報錯,為什麼呢?簡單來講,我們沒有為int 型指標p開闢記憶體...

NSString 初始化方法的記憶體比較

nsstring str1 hello nsstring str2 hello nsstring str3 nsstring stringwithformat hello nsstring str4 nsstring stringwithstring hello nsstring str5 nsst...