【发布时间】:2015-08-16 05:08:14
【问题描述】:
假设我有一些数据结构,其中结构具有指向其他结构的指针,例如链表。列表中的每个元素都有一个指向列表中另一个元素的指针
struct node{
char* data;
node* next;
};
当释放分配给这个结构的内存时,我知道我需要首先专门释放数据,因为我必须专门为它分配内存。但是接下来呢?它指向另一个节点,我相信释放它会释放下一个指向的实际节点。
清理时只释放整个节点是否足够,或者有什么方法可以释放指针而不释放它指向的结构?
【问题讨论】:
-
您要删除一项还是整个列表?无论哪种方式,
free()只释放它传递的指针;它不知道或释放该结构所指向的任何数据。 -
我不明白为什么你需要为
next分配内存? -
不要考虑释放指针——考虑释放你分配的内存块。一旦不再需要该块,就用一个空闲来平衡每个分配......可能有一百个指向同一个块的指针,你仍然只需要释放它一次,或者你可以有指向你不需要的东西的指针动态分配你根本不需要释放的。