0

この解放は正しいですか?

vSize -> 実行ごとに値が動的に変化します

// 割り当て

int* xDump = new int(vSize);
int* yDump = new int(vSize);

// 解放

delete xDump;
delete yDump;

この解放は正しいですか?

4

5 に答える 5

6

これは、次の限り正しいです。

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パターンを利用するため、プログラマーのエラーが減少し (つまり、メモリ リークの可能性が低くなります)、例外の安全性が向上します。

于 2013-04-16T10:06:15.617 に答える
3

ints の配列を割り当てようとしているようです。その場合は次のようになります。

int* xDump = new int[vSize];
int* yDump = new int[vSize];

delete [] xDump;
delete [] yDump;
于 2013-04-16T10:07:23.970 に答える
0

この構造:

int* xDump = new int(vSize);

次と同等です。

int* xDump = new int;
*xDump = vSize;

...答えはイエスです。配列を割り当てていないため、正しいです。

于 2013-04-16T10:18:01.533 に答える
0

ここでは当てはまらないと思われる配列を削除する場合は、delete [] を呼び出す必要があります。ただし、パラメーター vSize が角括弧 [] で囲まれている場合 (これが必要な場合がありますか?)、delete [] を呼び出す必要があります。

于 2013-04-16T10:12:05.610 に答える