Ir para conteúdo

Lucas Praxedes Fischer de Mattos

Membros
  • Postagens

    1
  • Registro em

  • Última visita

Posts postados por Lucas Praxedes Fischer de Mattos

  1. 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;
    }
×
×
  • Criar Novo...