new釋放記憶體理解c

2021-10-07 07:47:55 字數 1222 閱讀 8717

釋放記憶體後,本身抄指標的內容是不會改變的即指標指向沒有變,但是它裡面儲存的位址所對應的內存在系統裡標記為未使用的即指向的記憶體區域已經被系統收回了,這塊記憶體隨時可能會被分配給其他程序或程序裡面的變數使用,所以要避免使用此指標,因此要把這個指標置為null, null指標是不指向任何乙個位址的,nullptr  和  null  一樣

指標指向的是陣列用delete   (中間有無空格都可),否則用delete

delete 

delete

如下,其他指標有指向此new指標首位址,只需要釋放一次,兩個任意釋放乙個即可,不能兩個都釋放,因為他們指向同一塊記憶體( 不能釋放已經釋放的記憶體塊),如果其他指標不指向此new指標首位址則不能用其他指標釋放

int *cossinidx = new int[ndstwidth * 2];

int * cossinptr = cossinidx;

函式內部的定義的臨時變數指標就像其他變數一樣,函式結束則自動被釋放,但是new的記憶體空間不會被釋放,所以要手動釋放

如果向此new空間首位址的指標是在函式內定義的,函式結束會自動被釋放,把它置為null,是擔心它在此函式內被再次使用,如果是在函式結束釋放了new的空間,此指標也可以不置為null

在函式的內new空間後的每乙個返回值前面都要進行釋放

指向此new指標首位址的指標才能釋放此記憶體是因為位址首位址裡面存放了很多資訊,包括了記憶體大小等資訊,再釋放指標的時候系統會自動根據這些資訊釋放記憶體

delete   rg   用來釋放rg指向的記憶體,!!還逐一呼叫陣列中每個物件的destructor

new()分配這種型別的乙個大小的記憶體空間,並用括號中的值來初始化這個變數

new 分配這種型別的n個大小的記憶體空間,並用預設建構函式來初始化這些變數

int *pp=new int;//delete pp;

int *p0=new int[3] ;//delete p0;

int *p1=new int[3] ;//delete p1;

malloc和new一樣,但是釋放空間用free

對空指標應用delete是安全的

定義乙個指標但是未賦值時,指標為null

int* p;

new建立類物件例子:ctest* ptest = new ctest();

delete ptest;

ptest用來接收類物件指標。

delete釋放new 開闢的記憶體

直接看下面這道題 使用 char p new char 10 申請一段記憶體,然後使用delete p釋放,有什麼問題?a 會有記憶體洩露 b 不會有記憶體洩露,但不建議用 c 編譯就會報錯,必須使用delete p d 編譯沒問題,執行會直接崩潰 這道題題目開闢的是10個char型別的空間,因為是...

New動態分配 Delete 釋放記憶體

在c 中,對於變數和物件都是編譯器在編譯時分配好的,對於陣列初始化時,無法確定多少記憶體,很容意造成大開小用的情況。new 動態分配 一般格式 1.指標變數名 new 型別識別符號 2.指標變數名 new 型別識別符號 初始值 3.指標變數名 new 型別識別符號 記憶體單元個數 開闢陣列的定義方法...

C 記憶體申請 記憶體釋放

在初步學習c 時,遇到分配和釋放。下面進行個人的最簡短的總結 規則1 用malloc或new申請記憶體之後,應該立即檢查指標值是否為null。防止使用指標值為null的記憶體。規則2 不要忘記為陣列和動態記憶體賦初值。防止將未被初始化的記憶體作為右值使用。規則3 避免陣列或指標的下標越界,特別要當心...