これで2つのプログラムをレイアウトします。両方ともポインタと新しい演算子を使用する動的配列です。しかし、削除演算子が好きではないようです。C++ポインタと動的配列と削除演算子
#include <iostream>
int main()
{
int *p;
p = new int[5];
for (int i = 0; i < 5; i++)
{
p[i] = 25 + (i * 10);
std::cout << p[i] << " ";
}
std::cout << std::endl;
delete [] p;
p = NULL;
return 0;
}
これは最初のプログラムです。それは、削除演算子がうまく好きです。削除オペレータが嫌いなプログラム:
#include <iostream>
int main()
{
int x;
int *p;
p = new int[5];
*p = 4;
for (int i = 0; i < 5; i++)
{
std::cout << *p << " ";
x = *p;
p++;
*p = x + 1;
}
std::cout << std::endl;
delete [] p;
p = NULL;
return 0;
}
このプログラムはうまくコンパイルされます。しかし、実行中に、それはエラー - free(): invalid pointer: 0xfdb038
..またはその特定の実行のためのメモリアドレスが何であれ、スローされます。したがって、質問は次のようになります。 2番目のケースでdelete演算子を使用できないのはなぜですか? 私はメモリリークを望んでいません。私はポインタがぶら下がっていることを望んでいません。 私はちょうどp = NULL;
と言うならば、p = 0
が、まだ私はポインタがまだぶら下がっていると信じていますか?しかし、わかりません。前もって感謝します。コードの2番目の部分で、このループで
2番目のケースでは、 'p'ポインタを変更するため、削除前に配列の先頭に移動しないためです。 –