new []とdeleteを組み合わせたり、その逆(delete []とnew)を組み合わせたりしないようにする必要があることはわかっています。それで
int* k = new int[5];
delete k;
割り当てられたアレイを解放しないため、欠陥があります。しかし、次は間違っていますか?
int *k = new int[5];
for (int i = 0; i < 5; ++i)
delete k[i];
間違って私は意味します-それは実際にメモリリークまたは未定義の動作を引き起こしますか?
編集**私の悪い、私がタイプするつもりだったのはこれでした:
int** k = new int*[5];
memset(k, 0, sizeof(int*)*5);
k[3] = new int;
for (int i = 0; i < 5; ++i)
if (k[i])
{
delete k[i];
k[i] = 0;
}
上記では、5つの場所のブロックは、それ自体でdelete []を呼び出さない限り、実際に解放されることはありませんがk
、その中のintを新規/削除で管理できます。