0
#include <iostream>

using namespace std;

int main()
{
    int i,j;
    int * k;
    char m;
    do{
        cin >> j;
        k = new int[j];
        for (i = 0; i < j; i++){
            k[i] = i;
            cout << k[i] << ", ";
        }

        delete[] k;

        cout << "\nContinue?\n";
        cin >> m;
    }while (m != 'n');
}

newこれは、とを理解する上での問題を説明するために作成したプログラムですdelete。'k' でメモリ リークが発生しますか?

4

3 に答える 3

11

このコードは例外セーフではありません - 例外がスローさnew[]delete[]、指しているブロックがリークした場合。std::vectorこの問題を解決するために使用します。

于 2012-07-18T13:55:29.167 に答える
1

すでにsharptoothで指摘されているように、try-catchブロックを使用して、例外がキャッチされてk解放されることを確認する必要があります。通常、valgrindを使用して、プログラムが実行中に割り当てられたすべてのブロックを解放しているかどうかを確認できます。

于 2012-07-18T14:07:01.510 に答える
0

いいえ、ループ内でメモリを解放するため、このインスタンスではそうではありません。ただし、この場合はscoped_arrayを使用する方がはるかに優れています。

于 2012-07-18T13:56:37.053 に答える