c中delete之後的再new問題

2021-03-09 19:02:01 字數 1279 閱讀 9692

1樓:

作為指標型簡單變數使用刪不刪,都可以用,就等於已宣告瞭:

int *p;

指標本身已有儲存單版元。

new int; 是給它分配存權

放指向數值的單元。

delete 只刪了 存放指向數值的單元。

指標本身單元還在。只要它的使用符合語法,仍然可用。例如:

a = 2;b=3;

p = &a; printf("%d\n",*p);

p = &b; printf("%d\n",*p);

-----------------------int *p=new int;

*p=1;

delete p;

*p=2;

不發生錯誤因為程式較小,指向的數值單元裡的值尚未發生變化,單元也未重新分配另作它用。

養成習慣,程式設計時要儘量避免這種用法。

2樓:匿名使用者

分配空間是指bai

從程式可用的堆du空間裡取出zhi

合適大小的dao空間,並將這個空間內

的地址付給指容

針p. 在顯示的釋放前,這片記憶體不會被分配給其他指標。

delete完成兩個動作:1,清空ptr指向的記憶體(對於類物件指標,就是呼叫其解構函式)。2,告訴系統這快記憶體現在沒有被引用,可以被分配給其他的申請者。

上面的程式中,delete p後, p指向記憶體的值被清空,也就是*p是一個未被初始化的整型變數。指標p的值並未被改改變,指標p仍然指向這片記憶體。因此,*p=2; 仍然可以執行。

可能的問題是,某次呼叫int *p2 = new int時,系統會把這片記憶體視為可分配的記憶體而分配給p2,那麼 p2與p指向同一片記憶體, 而產生不可預計的程式邏輯。

3樓:蘋果味の麵包

delete後

p = null;的操作是bai

很必要的。

delete的p俗稱野指標du,指向zhi了未知內容。dao這段記憶體可能為其他資料版所用。

一般來說,權這段記憶體被其他操作改寫的可能性並不大,因此會正確顯示。但是是絕對的危險操作。

每年世界上都要花20億美元解決野指標引起的bug,尤其對長期執行的程式,危害極大。

4樓:選擇郵箱

delete之後的再bainew絕對是必須的你寫的程du

序很zhi小,p的地址空間dao可能一直未被專佔用,但當一臺電腦有屬大量程式執行時,不能確定作業系統會分配哪段記憶體,如果在你delete p之後,p的空間被佔用,而你此時在向p進行賦值便會導致程式崩潰

c中new的用法C中new的用法

c 中new運算子用於動態分配和撤銷記憶體的運算子。1 開闢單變數地址空間 new int 開闢一個存放陣列的儲存空間,返回一個指向該儲存空間的地址.int a new int 即為將一個int型別的地址賦值給整型指標a.2 int a new int 5 作用同上,但是同時將整數賦值為5。2 開闢...

C 中的new函式怎麼用,C 中new的用法

1.new的作用是從自由儲存為 類 的物件或物件陣列分配記憶體,並將已適當分類的非零指標返回到物件。比如 char pchar new char 10 delete pchar 例子中動態分配了10個char型別的記憶體給了pchar,來構成一個陣列。需要注意的是,分配陣列採用 如果只是單個的只要n...

C中什麼情況下要使用new關鍵字?這問題深奧額

請lz看看這個 c 的new關鍵字有幾種用法 1 new 運算子 用於建立物件和呼叫建構函式。2 new 修飾符 用於隱藏基類成員的繼承成員。3 new 約束 用於在泛型宣告中約束可能用作型別引數的引數的型別。new 運算子 1.用於建立物件和呼叫建構函式 例 class test myclass ...