estou fazendo um codigo para somar 2 listas encadeadas de numeros inteiros, porem sempre fica dando "signal: segmentation fault(core dumped)" no repl.it e "runtime error" no compilador da propria faculdade. Com a entrada "12 21" sai o resultado parcial:
"O valor é: 2
12
1
1634545454
signal: segmentation fault(core dumped)"
Além disso, a funçao "libera" e "retira" também dão o mesmo erro. Isso, porque eu fiz literalmente igual ao codigo exemplo da professora.
/* Programa: Exercício 4
Autor: Lucas Praxedes Fischer de Mattos (RA 156697)
Turma: IB
Concluída em: 16/11/2021*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 100
typedef struct lista{
int digt;
struct lista *prox;
} reglista;
typedef reglista *pont;
pont alocacao(pont lista, int val){
pont novo=(pont)malloc(sizeof(reglista));
novo->digt= val;
novo->prox= lista;
return novo;
}
pont retira(pont lista, int val){
pont ant= NULL, busca;
for(busca=lista; busca!=NULL && busca->digt!=val; busca=busca->prox)
ant= busca;
if(busca==NULL)
return lista;
if(ant==NULL)
lista=busca->prox;
else
ant->prox=busca->prox;
return lista;
}
void libera(pont lista){
pont paux=lista, paux2;
while(paux!=NULL){
paux2=paux->prox;
free(paux);
paux=paux2;
}
}
void imprime (pont lista) {
pont paux;
for (paux = lista; paux != NULL; paux = paux->prox)
printf ("%d\n", paux->digt);
}
pont soma(pont lista1, pont lista2){
pont paux;
int val= lista1->digt + lista2->digt;
while(lista1->prox != NULL && lista2->prox != NULL){
if(val>9){
paux->prox->digt=1;
paux->digt=val-10;
}
else
paux->digt=+val;
lista1=lista1->prox;
lista2=lista2->prox;
paux=paux->prox;
val=lista1->digt+lista2->digt;
}
return paux;
}
int main(){
pont lista1, lista2, lista3;
char string1[MAX], string2[MAX];
int i=0;
scanf("%s", string1);
scanf("%s", string2);
while(i<strlen(string1)){
lista1=alocacao(lista1,atoi(&string1[i]));
i++;
}
i=0;
while(i<strlen(string2)){
lista2=alocacao(lista2,atoi(&string2[i]));
i++;
}
printf("O valor é: ");
imprime(lista1);
return 0;
}