读书人

关于free函数,该怎么处理

发布时间: 2013-04-21 21:18:07 作者: rapoo

关于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 指向的内存块释放 两者都指向一个无效对象

读书人网 >C语言

热点推荐