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');
}

这是我为描述我在理解newdelete. '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 回答