这段代码中是否有内存泄漏?

时间:2012-07-18 13:54:03

标签: c++ pointers memory-leaks

#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'会产生内存泄漏吗?

3 个答案:

答案 0 :(得分:12)

此代码不是异常安全的 - 如果在new[]delete[]之间抛出异常,则指向的块被泄露。使用std::vector解决此问题。

答案 1 :(得分:1)

正如sharptooth已经指出的那样,你应该使用try-catch块来确保捕获任何异常并释放k。 在一般情况下,您可以使用valgrind检查您的程序是否释放了在执行期间分配的所有块。

答案 2 :(得分:0)

不,在这种情况下不会释放循环中的内存。但是,在这种情况下使用scoped_array会更好。