gpt4 book ai didi

c - 段错误、指针问题

转载 作者:行者123 更新时间:2023-11-30 17:13:48 25 4
gpt4 key购买 nike

#include <stdio.h>
#include <stdlib.h>

typedef struct lista_inteiros
{
int valor;
struct lista_inteiros *next;

}element_int;

void insere_inteiro(element_int **head, element_int **aux, int m);
void remove_inteiro(element_int **head, element_int **aux, int m);

int main()
{
int i = 0;
element_int *head, *aux;

head = NULL;

for(i = 0; i<6; i++)
{
insere_inteiro(&head, &aux, i);
}

aux = head;

while(aux)
{
printf("%d\n", aux->valor);
aux = aux->next;
}

aux = head;
i = 4;

remove_inteiro(&head, &aux, i);

aux = head;
while(aux)
{
printf("%d\n", aux->valor);
aux = aux->next;
}


return 0;
}

void insere_inteiro(element_int **head, element_int **aux, int m)
{
(*aux) = (element_int*)malloc(sizeof(element_int));
if((*aux) == NULL)
{
printf("Error\n");
exit(1);
}

(*aux)->valor = m;
(*aux)->next = (*head);
(*head) = (*aux);
}

void remove_inteiro(element_int **head, element_int **aux, int m)
{
element_int *del;

while((*aux) != NULL)
{
if((*head)->valor == m)
{
(*head) = (*head)->next;
free(aux);
(*aux) = (*head);
}

else if((*aux)->next->valor == m)
{
del = (*aux)->next;
(*aux)->next = del->next;
free(del);
}
(*aux) = (*aux)->next;
}
}

Baiscally,这打印:

5
4
3
2
1
0
Segmentation Fault

我真的不明白为什么。应该消除数字4,然后再次打印数字。所以期望的输出是:

5
4
3
2
1
0
5
3
2
1
0

函数 insere_inteiro 创建一个新元素,函数 remove_inteiro 删除一个元素。

列表中的每个元素都有一个名为 valor 的整数。

最佳答案

您在 else if((*aux)->next->valor == m) 中取消引用下一个值,而不检查是否存在

关于c - 段错误、指针问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30596069/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com