#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'会产生内存泄漏吗?
答案 0 :(得分:12)
此代码不是异常安全的 - 如果在new[]
和delete[]
之间抛出异常,则指向的块被泄露。使用std::vector
解决此问题。
答案 1 :(得分:1)
正如sharptooth已经指出的那样,你应该使用try-catch块来确保捕获任何异常并释放k
。
在一般情况下,您可以使用valgrind检查您的程序是否释放了在执行期间分配的所有块。
答案 2 :(得分:0)
不,在这种情况下不会释放循环中的内存。但是,在这种情况下使用scoped_array会更好。