我试图理解delete []的用法.以下代码是否会发生内存泄漏?
int * getArray( )
{
int *r = new int[10];
for (int i = 0; i < 10; ++i)
r[i] = i;
return r;
}
int main ()
{
int *array;
for ( int i = 0; i < 10; i++ ) // main loop
array = getArray();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
主循环似乎是为10个数组分配内存,其中只有最后一个数组有一个有效的指针.如果这是内存泄漏,我如何释放存储前9个阵列的内存?
我也可以用来const int r[10];代替编译int *r = new int[10];.可以使用const避免内存泄漏吗?
每次调用new必须与调用配对delete以避免内存泄漏(或new[]和delete[]).
如何删除内存取决于你正在做什么,但由于你没有保持访问超出for循环,那么你可以轻松地在for循环体内删除它.
for (int i = 0; i < 10; ++i)
{
array = getArray();
/* do something with 'array' */
delete[] array;
}
Run Code Online (Sandbox Code Playgroud)
更好的是,为什么不使用std::vector<int>并避免直接执行任何内存分配?
编辑:
正如@Niall在评论中提到的那样,你也应该熟悉std::unique_ptr(假设你是编译器支持它).它使用RAII(维基百科链接,cppreference链接)来自动处理内存管理.例如,一旦类超出范围std::unique_ptr<int[]>,它将自动调用delete[].
| 归档时间: |
|
| 查看次数: |
183 次 |
| 最近记录: |