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

Min*_*man 0 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');
}
Run Code Online (Sandbox Code Playgroud)

这是我用来描述我理解new和解决问题的程序delete.'k'会产生内存泄漏吗?

sha*_*oth 11

此代码不是异常安全的 - 如果在它之间抛出异常new[]并且delete[]指向的块被泄露.使用std::vector来解决这一问题.

  • @Sagi没有什么能阻止`cout`或其中一个插入操作符抛出.我不认为`int []`的操作可以抛出,但`iostream肯定可以. (3认同)