1

3行目が何をしているのか教えてください。

int main(){

int *p = new int[3];

*p++=0; // What's this line doing?

delete p;

return 0;   
}
4

3 に答える 3

3

*p++=0;これを意味します:

  1. sizeof(int)に格納されているアドレスに 0 バイトを書き込みますp
  2. の値を でインクリメントしpますsizeof(int)

つまり、ポインターをインクリメントしたため、次に渡すものdeleteは operator によって返されたものと同じではありませんnew[]

@FredLarson も述べているようにdelete [] p;、配列を削除するには使用する必要があります。

また、ポインター、ポインター演算、およびプリインクリメント/ポストインクリメントについてもお読みになることをお勧めします。Definitive C++ Book Guide and Listから本を選んでください。

于 2013-01-16T04:22:29.327 に答える
1

配列の最初の要素は 0 に設定され、p は 2 番目の要素を指すように 1 つ進められます。

delete p; // this has undefined behaviour

delete [] p;代わりに使用してください。

于 2013-01-16T06:02:25.980 に答える
0

p[0] を 0 に設定し、ポインタを p[1] に進めています。あなたは何をしようとしているのですか?

于 2013-01-16T04:22:09.217 に答える