關於new、delete和堆的一些理解先看以下的兩個簡單的程式:
第一://visula c++ 6.0環境
#include
void main()
其中第乙個程式存在錯誤(會生成.exe檔案,但是執行有錯誤)
問題出在對new和delete、堆不是很了解。
而第二個程式是正確的。
現在我來分析一下:
int *p=new int;
是在heap分配乙個int型的空間,而p是在stack裡的乙個指標,它指向heap裡的那個int,
在程式結束的時候,p指標將釋放掉,所以要在程式結束的時候delete p,這是為了釋放在
heap裡分配的那個int,否者會造成heap區空間的洩漏,這是很嚴重的。
第乙個程式中的:
p=&a;
它把a的位址賦給p,這時p指的是a,而不是heap裡的那個int了,後來
delete p;
這是想刪除p指向的內容,但是此時p指向的stack裡的a了,而delete是不能用
於stack的資料的,所以出現了錯誤。
第二個程式中的:
*p=a;
這只是將a的值賦給p指向的那個int,此時p還是指向heap裡的int,
所以這裡的
delete p;
是合法的了,不會出現錯誤。
關於new delete和堆的一些理解
關於new delete和堆的一些理解 先看以下的兩個簡單的程式 第一 visula c 6.0環境 include void main 其中第乙個程式存在錯誤 會生成.exe檔案,但是執行有錯誤 問題出在對new和delete 堆不是很了解。而第二個程式是正確的。現在我來分析一下 int p ne...
關於new delete和堆的一些理解
第一 visula c 6.0環境 include void main 第二 visual c 6.0環境 include void main int a 3 int p new int p a cout p 其中第乙個程式存在錯誤 會生成.exe檔案,但是執行有錯誤 問題出在對new和delete...
學習筆記 new delete的堆記憶體操作
c c 中的動態記憶體分配是指程式設計師手動執行記憶體分配。動態分配的內存在堆上分配,非靜態和區域性變數在堆疊上分配記憶體 有什麼應用?他與分配給普通變數的記憶體有什麼不同?如何在c 中分配 取消分配記憶體?普通陣列宣告與使用new 宣告普通陣列與使用new分配記憶體塊之間有區別。最重要的區別是,常...