首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于free函数,该怎么处理

2013-04-21 
关于free函数free函数只能释放有malloc分配的内存吗?1.如果有int *pint(int *)malloc(sizeof(int)*20)pi

关于free函数
free函数只能释放有malloc分配的内存吗?
1.如果有
int *pint=(int *)malloc(sizeof(int)*20);
pint++;
free(pint);
这个free函数释放的内存是哪些?是一个int型还是19个,或者是其他?

2.如果有
int *ptemp=pint;  //pint是直接分配的,指针没有进行移动
free(ptemp);    //这样可以吗?释放的内存又是怎样的?

3.如果有一个链表,节点结构是
node
{
    int val;
    node *next;
}

删除操作时是p->next=p->next->next;就是删除了p所指向的节点的下一个节点,那么这个被删除的节点内存怎么释放(假设这个单链表是动态建立的,由malloc临时分配的内存)


实在没分,高手们帮帮忙,谢谢!
[解决办法]
1.free会出异常吧
2.可以
3.在指到下一节点前释放原节点
[解决办法]
free函数只能释放有malloc分配的内存吗?
1.如果有
int *pint=(int *)malloc(sizeof(int)*20);
pint++;
free(pint);
这个free函数释放的内存是哪些?是一个int型还是19个,或者是其他?

pint 不是指向malloc得到的内存块了
free 的行为无法确定 反正 释放内存的操作应该是失败了

[解决办法]
1,那样操作会报错;
2.free只能释放动态分配的指针(malloc返回的指针)
3.这个是程序员的责任,如果丢了结点会造成内存泄露,不过程序结束时操作系统统一回收所有为该程序分配的内存
[解决办法]
2.如果有
int *ptemp=pint;  //pint是直接分配的,指针没有进行移动
free(ptemp);    //这样可以吗?释放的内存又是怎样的?

可以没问题 这样做之后 ptemp 和 pint 指向的内存块释放 两者都指向一个无效对象

热点排行