как устранить ошибку "ошибка сегментации" в "C" для списка и файла - PullRequest
0 голосов
/ 21 июня 2020

У меня большая проблема с моим кодом.

Я не могу найти решение проблемы. Код работает с файлом Lista.h. список создается путем чтения текстового файла через анализатор гибкости и компилятор bison. Ниже кодов для файла «. c» и библиотеки «.h»

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "Lista.h"

double search_CFU(char Cod_M);

Materia *lista;
Materia *ins_M(char cod_m, int anno_c, double CFU){
    Materia *c;
    c = (Materia *)malloc(sizeof(*c));
    c -> cod_m = cod_m;
    c -> anno_c = anno_c;
    c -> CFU = CFU;
}

Carriera *lista1;
Carriera *ins_s(char matr, int anno_c){
    Carriera *s;
    s = (Carriera*)malloc(sizeof(*s));
    s -> matr = matr;
    s -> anno_c = anno_c;
}


double Calc_M(char Cod_M, double voto){
    if(lista -> anno_c == lista1 ->anno_c){
        double num_CFU = search_CFU(Cod_M);
        lista1 -> prodotto = num_CFU * voto;
        lista1 -> CFU += num_CFU;
        lista1 -> num_e+1;
    }
}


double search_CFU(char Cod_M){
    while(lista != NULL){
        if(Cod_M == lista-> cod_m){
            return lista -> CFU;
        }
        else printf("Errore");
    }
}
void print(){
    Carriera *tmp = lista1;
    while(lista1 != NULL){
        printf("%d > %f > %d > %f,2", lista1 -> matr, lista1 -> CFU, lista1 -> num_e, lista1 -> prodotto/ lista1 -> CFU);
        lista = lista -> next;
    }
    lista1 = tmp;   
}

библиотеки:

typedef struct c{ //corsi
    char cod_m;
    int anno_c;
    double CFU;
    struct c *next;
}Materia;

typedef struct s{  //studenti
    char matr;
    int anno_c;
    double CFU;
    double prodotto;
    int num_e;
    struct s *next; 
}Carriera;

Materia *ins_M(char cod_m, int anno_c, double cfu);
Carriera *ins_s(char matr, int anno_c);
double Calc_M(char cod_m, double voto);

вывод: segmentation fault. спасибо, ребята

ОБНОВЛЕНИЕ:

У меня новая ошибка, скомпилированная с помощью «-Wall -Werror»

ошибка:

Carriera.c: In function ‘ins_M’:
Carriera.c:17:1: error: control reaches end of non-void function [-Werror=return-type]
   17 | }
      | ^
Carriera.c: In function ‘ins_s’:
Carriera.c:26:1: error: control reaches end of non-void function [-Werror=return-type]
   26 | }
      | ^
Carriera.c: In function ‘Calc_M’:
Carriera.c:37:1: error: control reaches end of non-void function [-Werror=return-type]
   37 | }
      | ^
Carriera.c: In function ‘search_CFU’:
Carriera.c:47:1: error: control reaches end of non-void function [-Werror=return-type]
   47 | }

спасибо

1 Ответ

0 голосов
/ 21 июня 2020

При компиляции вашего кода g cc сообщает о многих предупреждениях (которые вы действительно должны рассматривать как ошибки):

Lista.c:15:1: warning: control reaches end of non-void
      function [-Wreturn-type]
}
^
Lista.c:23:1: warning: control reaches end of non-void
      function [-Wreturn-type]
}
^
Lista.c:31:24: warning: expression result unused
      [-Wunused-value]
        lista1 -> num_e+1;
        ~~~~~~~~~~~~~~~^~
Lista.c:33:1: warning: control reaches end of non-void
      function [-Wreturn-type]
}
^
Lista.c:43:1: warning: control may reach end of non-void
      function [-Wreturn-type]
}
^

https://repl.it/repls/SilkySlowAdaware#Lista. c

...