关于释放动态数组的问题。 我分配多个内存块,地址给指针**p 然后每个数组中每个元素都指向一块同
关于释放动态数组的问题。我分配多个内存块,地址给指针**p然后每个数组中每个元素都指向一块同样大小的内存这样来创建的一个动态二维数组如果我释放p会发生什么?...
关于释放动态数组的问题。
我分配多个内存块,地址给指针**p
然后每个数组中每个元素都指向一块同样大小的内存
这样来创建的一个动态二维数组
如果我释放p会发生什么? 展开
我分配多个内存块,地址给指针**p
然后每个数组中每个元素都指向一块同样大小的内存
这样来创建的一个动态二维数组
如果我释放p会发生什么? 展开
展开全部
如果你定义如下:
int **p = new int*[20]; // PART 1
for (int i = 0; i < 20; ++i) {
p[i] = new int[30]; // PART 2
}
如果你值释放p: delete[] p;
那么实际上你只是放了 PART 1开辟的内存。
正确应该是:
for(i = 0; i < 20; i++)
{
delete[] p[i];
}
delete []p;
int **p = new int*[20]; // PART 1
for (int i = 0; i < 20; ++i) {
p[i] = new int[30]; // PART 2
}
如果你值释放p: delete[] p;
那么实际上你只是放了 PART 1开辟的内存。
正确应该是:
for(i = 0; i < 20; i++)
{
delete[] p[i];
}
delete []p;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
只释放了p这个存放内存指针的数组的内存,而你new出来的内存块,并没有被释放掉,造成了内存泄漏。在delete p之前,遍历下p数组,把p[]都释放掉就可以了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询