1

如何从 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;
        }
    }

}

但是这段代码给了我一个分段错误,我不知道为什么,你能弄清楚我在这里做错了什么吗?

4

1 回答 1

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)将不起作用。

于 2013-05-09T19:15:01.453 回答