int* arr = new int[30];
int* newArr = new int[30];
arr[15] = 5;
newArr[15] = 9;
arr = newArr;
delete[] newArr;
最後の行は、それによっても、ARRを解放し、newArrが解放されます。
かなりです。 newArr
とarr
は、メモリのブロックを指す名前に過ぎません。あなたは本当に "newArrを解放していません"、あなたは現在指しているメモリブロックを解放します。その瞬間には現在arr
が指し示しているのと同じブロックになります。
しかし、5を含むメモリブロックには何が起こったのですか?
これはまだ使用されているとマークされていますが、プログラムの中にはそれを再度指すことはできません。あなたが今まで持っていたポインタはarr
でしたが、arr
を別のものに割り当てました。
今は再びアクセスできないメモリリークはありますか?
正確に。その場合は、同時に成功し 元の配列を再割り当てしながら、
、私は、このメモリは が漏洩することは決してできないことを確認することについてどのように行くべきですか?
このダイナミックアレイはナンセンスで忘れて、std::vector
を使用してください。
std::vector<int> arr(30);
std::vector<int> newArr(30);
arr[15] = 5;
newArr[15] = 9;
arr = newArr;
_ "これにより、arr" _ Huh?も解放されます。 –
@πάνταῥεῖarrとnewArrは同じことを指していますので、私は 'delete [] newArr'でそれらの両方を解放すると言って間違っていますか? –
同じことを両方とも解放していますか?どういう意味ですか? – juanchopanza