この解放は正しいですか?
vSize -> 実行ごとに値が動的に変化します
// 割り当て
int* xDump = new int(vSize);
int* yDump = new int(vSize);
// 解放
delete xDump;
delete yDump;
この解放は正しいですか?
これは、次の限り正しいです。
int* xDump = new int(vSize);
int* yDump = new int(vSize);
これは想定されていませんでした:
int* xDump = new int[vSize];
int* yDump = new int[vSize];
角括弧を使用している場合は、配列を動的に割り当てています。この場合、delete[] キーワードを使用する必要があります。そのようです:
delete[] xDump;
delete[] yDump;
動的に割り当てられた配列が本当に必要な場合は、new/delete で配列を作成するよりも、 std::vectorを使用することをお勧めします。
たとえば、状況でベクトルを使用する方法は次のとおりです。
std::vector<int> xDump(vSize);
std::vector<int> yDump(vSize);
// no need for delete[]
ポインター (ヒープに割り当てられたメモリを指すポインター) を所有することは避け、必要に応じてコード内でスマート ポインターまたはコンテナーを使用するようにしてください。スマート ポインターとコンテナーの両方が非常に便利なRAIIパターンを利用するため、プログラマーのエラーが減少し (つまり、メモリ リークの可能性が低くなります)、例外の安全性が向上します。
int
s の配列を割り当てようとしているようです。その場合は次のようになります。
int* xDump = new int[vSize];
int* yDump = new int[vSize];
と
delete [] xDump;
delete [] yDump;
この構造:
int* xDump = new int(vSize);
次と同等です。
int* xDump = new int;
*xDump = vSize;
...答えはイエスです。配列を割り当てていないため、正しいです。
ここでは当てはまらないと思われる配列を削除する場合は、delete [] を呼び出す必要があります。ただし、パラメーター vSize が角括弧 [] で囲まれている場合 (これが必要な場合がありますか?)、delete [] を呼び出す必要があります。