免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1400 | 回复: 8
打印 上一主题 下一主题

这样的代码会不会内存泄漏!! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-01-08 11:45 |只看该作者 |倒序浏览
/*删除指定位置的元素*/
Status ListDelete(SqList &L, int i, ElemType e){
        ElemType *p,*q;
        if(i <1 || i > L.length +1)return(ERROR);
        p = &(L.elem[i - 1]);
        e = *p;
        q = L.elem + L.length -1;
        for(++p;p <= q;++p) *(p-1) = *p;
        --L.length;
        return OK;
}


其中的
        p = &(L.elem[i - 1]);
        e = *p;
        q = L.elem + L.length -1;
        for(++p;p <= q;++p) *(p-1) = *p;
这段被删除的元素的指针在经过几个语句后指向了新的地址,但是这个元素所占据的内存空间并没有释放阿,
我想知道的是由
malloc分配的内存是不是当作一个整体来处理,由free来一起释放,是否是这样的?
如果是那么只要在不使用整个分配的内存的时候free是否就可以避免内存的泄漏。

论坛徽章:
0
2 [报告]
发表于 2007-01-08 12:11 |只看该作者
haha,没有看的太明白!
你的代码里边也没有malloc呀?
而且,你程序里边的操作好像全是对于指针中的内容进行的操作??
没有改变指针本身。不知道说的对不对!

论坛徽章:
0
3 [报告]
发表于 2007-01-08 12:48 |只看该作者
你这个表应该是用数组来存贮的吧

论坛徽章:
0
4 [报告]
发表于 2007-01-08 12:55 |只看该作者
是的这是一个顺序表的实现,全部的代码太长我没贴
/*构造一个空表*/

Status InitList(SqList &L) {
       
        L.elem = (ElemType *) malloc(LIST_INIT_SIZE * sizeof(ElemType));
        if(!L.elem)exit(OVERFLOW);
       
        L.length = 0;
        L.listsize = LIST_INIT_SIZE;
        return OK;

}
******************************

/*销毁一个表*/
Status DestroyList(SqList &L) {
        if(!L.elem)exit(ERROR);
        free(L.elem);
        L.elem = NULL;
        //L = NULL;       
        return OK;
}
*********************

这是创建以及销毁表的代码!!

论坛徽章:
0
5 [报告]
发表于 2007-01-08 13:00 |只看该作者
结构不好, 应该

Status ListDelete(SqList &L, int i, ElemType e)
{
      return L.deleteElem(i, e);
}

论坛徽章:
0
6 [报告]
发表于 2007-01-08 13:07 |只看该作者
楼上的意思是需要释放这个element?

论坛徽章:
0
7 [报告]
发表于 2007-01-08 13:08 |只看该作者
数组实现当然没什么问题,但是数组不能动态的扩展。

论坛徽章:
0
8 [报告]
发表于 2007-01-08 13:10 |只看该作者
我觉得是每个对链表操作的函数最好是返回一个头节点的指针
5楼的兄弟应该也是这个意思吧

论坛徽章:
0
9 [报告]
发表于 2007-01-08 13:18 |只看该作者
这个不是链表是顺序表

我的关键问题是由malloc分配的内存块是否是以整体的形式存在的。free的时候是销毁这个内存块的整体。而不是一个一个小块的使用和销毁的。
从目前我找到的资料来看,应该可是肯定malloc是整块分配内存的,free是销毁这个块。这样的话这个程序段中的代码就不会有问题了,它只是把删除的块的指针指向了后一个并且后面的顺序相前移,虽然指向删除块的指针指向了别的地址,但是这个小块的内存还是在malloc分配的内存上的,所以在free的时候会一起销毁掉也就不会有泄漏了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP