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;合法的です.間違いはありません.