我目前正在玩鏈接列表,並且爲了測試目的,我已經放在一起以下代碼。鏈接列表未釋放,缺少內存泄漏
首先我想指出,我知道我的不尋常的列表設置,這只是一個測試,以獲得一個不倒掛的名單。我現在的實際「問題」是,一旦程序終止,我似乎沒有任何內存泄漏,儘管我沒有釋放該列表。我在Windows上使用drmemory進行分析,並且它一直很好地工作。如果我在這段代碼中加入了一些其他的malloc,它會注意到沒有釋放的內存。爲什麼它沒有注意到列表?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// ----------------------
typedef struct Item
{
char name[10];
struct Item *next;
} Item;
Item *items = NULL;
Item *items_add(const char* name)
{
Item *new = malloc(sizeof(Item));
strcpy(new->name, name);
new->next = NULL;
if(items == NULL)
{
items = new;
}
else
{
Item *iter = items;
while(iter->next != NULL)
{
iter = iter->next;
}
iter->next = new;
}
return new;
}
void items_rem(const char* name)
{
if(items == NULL)
return;
Item *iter = items, *prev;
do
{
if(strcmp(iter->name, name) == 0)
{
prev->next = iter->next;
free(iter);
break;
}
prev = iter;
iter = iter->next;
}
while(iter->next);
}
// ----------------------
int main(void)
{
items_add("Item1");
items_add("Item2");
items_add("Item3");
items_add("Item4");
items_rem("Item3");
for(Item *iter = items; iter != NULL; iter = iter->next)
{
printf("%s\n", iter->name);
}
/*
Output:
Item1
Item2
Item4
*/
}
+1用於播放鏈接列表。 – 2012-03-15 16:46:17
似乎'prev-> next'在刪除第一個元素的過程中未被初始化。 – 2012-03-15 17:02:33
@EAGER_STUDENT:你說得對,謝謝。在發佈之前,沒有真正考慮列表中只有一個項目的情況。 – Mars 2012-03-15 17:33:14