new、deleteとスタックについてのいくつかの理解

1000 ワード

new、deleteは一緒に使用でき、ペアで表示されます.まず、以下の2つの簡単なプログラムを見てみましょう.1つ目は、//////////Visula C++6.0環境です.
#include <iostream.h> 

void   main() 

{ 

int   a=3; 

int   *p=new   int; 

p=&a; 

cout < <*p < <endl; 

delete   p;   /////////    

} 

第2:////////////////////////Visual C++6.0環境
#include <iostream.h> 

void   main() 

{ 

int   a=3; 

int   *p=new   int; 

*p=a; 

cout < <*p < <endl; 

delete   p; 

} 

第1プログラムにエラーが発生しました(.exeファイルが生成されますが、実行にエラーがあります)問題はnewとdelete、スタックについてよく知らないことです.2番目のプログラムは正しいです.ここで分析します: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のデータには使えないのでエラーが発生しました.第2のプログラムの中の:*p=a;これはaの値をpが指すintに与えるだけで、この時pはheapのintを指すので、ここのdelete p;合法的です.間違いはありません.