3行目が何をしているのか教えてください。
int main(){
int *p = new int[3];
*p++=0; // What's this line doing?
delete p;
return 0;
}
*p++=0;
これを意味します:
sizeof(int)
に格納されているアドレスに 0 バイトを書き込みますp
。p
ますsizeof(int)
。つまり、ポインターをインクリメントしたため、次に渡すものdelete
は operator によって返されたものと同じではありませんnew[]
。
@FredLarson も述べているようにdelete [] p;
、配列を削除するには使用する必要があります。
また、ポインター、ポインター演算、およびプリインクリメント/ポストインクリメントについてもお読みになることをお勧めします。Definitive C++ Book Guide and Listから本を選んでください。
配列の最初の要素は 0 に設定され、p は 2 番目の要素を指すように 1 つ進められます。
delete p; // this has undefined behaviour
delete [] p;
代わりに使用してください。
p[0] を 0 に設定し、ポインタを p[1] に進めています。あなたは何をしようとしているのですか?