【发布时间】:2013-03-26 23:36:12
【问题描述】:
当我在curr->data 中输入数据时,我首先通过curr = (NODE*) malloc (sizeof(NODE)); 分配内存。然后我建立列表并最终在最后打印它。在程序的某个地方,我必须释放我用过的内存,但我不知道什么时候该做。在建立列表之后,还是在我打印列表之后?或者我可以这样做吗?
printf("How many elements do you want to make? ");
scanf("%d", &NumElem);
head = NULL;
for (i = 0; i < NumElem; i++)
{
//memory allocate
curr = (NODE*)malloc(sizeof(NODE));
printf("Number %d: ", i+1);
scanf("%d", &curr->num);
FLUSH;
if (head == NULL)/*beginning of the list*/
{
curr->next = head;
head = curr;
*tail = curr;
}
else /*adding on the list*/
{
curr->next = head;
head = curr;
}
free (curr);
}//for
每次将数据放入当前节点后,可以释放吗?
【问题讨论】:
-
当你完成使用它。在这种情况下,你还没有完成使用它——即使你已经完成了循环。如果你
free它,那么tail和head(例如)现在指向垃圾,因为对象一直是freed。 -
释放内存后不能再次引用它,因为内容是未定义的。在完成列表所需的操作(我想打印它)之后,然后遍历列表,沿途释放每个节点。
-
非常重要:
FLUSH;是什么?
标签: c linked-list free