此代码中是否有任何内存泄漏

Is there any memory leak in this code?

本文关键字:任何 内存 泄漏 是否 代码      更新时间:2023-10-16
#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"会产生内存泄漏吗?

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

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

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