如何从c。
中删除链接列表中的项目typedef struct
{
int n;
struct item *nexI;
} item;
#define na 1000
int n, j;
我的主要内容是:
item * list[na];
n = 5;
for(j = 0; j < na; j++)
remove_elem(list, n, j);
现在我的函数remove_elem:
void remove_elem(item * list[], int n, int pos)
{
int i;
item * aux;
item * sec;
aux = list[pos]->nexI;
if(aux == NULL)
return;
else
{
sec = (item *)aux->nexI;
if(aux->n == n)
{
list[pos]->nexI = sec;
return;
free(aux);
}
while(sec != NULL)
{
if(sec->n == n)
{
aux->nexI = sec->nexI;
free(sec);
return;
}
aux = (item *) aux->nexI;
sec = (item *) sec->nexI;
}
}
}
但是这段代码给了我一个分段错误,我不知道为什么,你能算出我在这里做错了吗?
答案 0 :(得分:2)
严格按照您的代码进行操作,我会猜测它是关于未初始化的指针。
首先声明指针数组时,需要初始化指向NULL
的所有指针:
item * list[na] = { NULL };
然后你应该检查所有功能中的NULL
指针:
void remove_elem(item * list[], int n, int pos)
{
if (list[pos] == NULL)
return;
/* ... */
}
当然,当您分配一个新节点放入列表时,您当然必须将nexI
指针设置为NULL
,或者像if(aux == NULL)
这样的检查不行。