#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
的整数。
答案 0 :(得分:0)
您取消引用else if((*aux)->next->valor == m)
中的下一个值而不检查存在
答案 1 :(得分:0)
您取消引用NULL,这是一个固定版本:
void draw() {
background(0);
}
void keyPressed() {
if (key==CODED) {
if (keyCode == SHIFT){println("shift");}
else if(keyCode == CONTROL){println("ctrl");}
else if(keyCode == ALT) {println("alt");}
} else {
if (key == BACKSPACE) {
println("1: backspace");
} else if (key == DELETE) {
println("2: delete");
} else if (key == RETURN || key == ENTER) {
println("4: return");
} else {
println("5: " + key);
}
}
}
/ *以下更改为在DEREFERENCE之前检查空值* /
#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);
}