十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
因为free函数仅仅是告诉操作系统,这一块内存被释放了,可以用来作其它用途。但是,由于你没有重新对这块内存进行写操作,所以内存中的变量数值并没有发生变化。所以输出值不变。
创新互联是一家专业提供椒江企业网站建设,专注与做网站、网站建设、H5高端网站建设、小程序制作等业务。10年已为椒江众多企业、政府机构等服务。创新互联专业网站制作公司优惠进行中。
通常建议,将这个p用完了也置NULL
struct LNode *addroot(struct LNode *_root)
{
struct LNode *p = NULL, *p2 = NULL;
if(_root == NULL)
{
_root = talloc();
dateget(_root);
}
else
{
for(p=_root; p-next != NULL; p=p-next)
;
p2 = talloc();
dateget(p2);
p-next = p2;
}
return _root;
}
======================================
???? for?
for(p=_root; p-next != NULL; p=p-next)
;
不可以的。
malloc, alloc, free是c定义的一组内存管理的API函数,当你调用malloc、alloc分配内存时,不仅仅是从堆里面分配得到了可用内存,实际上内存管理子系统还会维护了内存列表。你自己定义的指针不会在这个列表中的,所以free会出问题的。
那么,使用new, GlobalAlloc之类的方式分配的内存可不可以使用free呢。我的回答是,尽量不要,大部分情况都会带来风险。这里面涉及new, malloc, GlobalAlloc, HeapAlloc, LocalAlloc,VirtualAlloc等函数的区别。