关于释放动态数组的问题。 我分配多个内存块,地址给指针**p 然后每个数组中每个元素都指向一块同

关于释放动态数组的问题。我分配多个内存块,地址给指针**p然后每个数组中每个元素都指向一块同样大小的内存这样来创建的一个动态二维数组如果我释放p会发生什么?... 关于释放动态数组的问题。

我分配多个内存块,地址给指针**p
然后每个数组中每个元素都指向一块同样大小的内存
这样来创建的一个动态二维数组

如果我释放p会发生什么?
展开
 我来答
风若远去何人留
2013-11-06 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450120
专业C/C++软件开发

向TA提问 私信TA
展开全部
内存泄露
假设你要分配10块内存 每块1K
那么要申请11次
第一次在p上申请10个指针大小的空间
2-11次申请10块1K空间
直接释放p
只释放了第一次申请的空间,后面10块就是超出管理之外了
也就是所说的内存泄露
追问
还问一下,我在非main函数中申请的内存会在出函数后一直保留不会销毁么?
追答
是的 直到你手动去销毁为止
yyjie999
2013-11-06 · TA获得超过199个赞
知道小有建树答主
回答量:197
采纳率:100%
帮助的人:180万
展开全部
如果你定义如下:
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;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友c0a13db
2013-11-06 · 超过21用户采纳过TA的回答
知道答主
回答量:62
采纳率:0%
帮助的人:41.8万
展开全部
只释放了p这个存放内存指针的数组的内存,而你new出来的内存块,并没有被释放掉,造成了内存泄漏。在delete p之前,遍历下p数组,把p[]都释放掉就可以了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式