что вызывает ошибку сегментации в моем коде? - PullRequest
0 голосов
/ 26 октября 2019

эта программа должна просто напечатать ввод, формат которого является выводом команды "ls". просто так.

тип ввода: drwxr-xr-x 2 персонал tommasomasaracchio 64 марта 1 2018 AnacondaProjects drwx ------ @ 7 персонал tommasomasaracchio 224 3 февраля 2019 приложения drwx ------ + 13 сотрудников tommasomasaracchio 416 6 октября, 10:15 рабочий стол drwx ------ + 21 сотрудников tommasomasaracchio 672 сент. 14 23:38 Документы

генерируют следующие ошибки Tommasos-MBP: проект tommasomasaracchio $ gcccodice.c Tommasos-MBP: проект tommasomasaracchio $ ./a.out input.txt Ошибка сегментации: 11

Я действительно не знаю, как решить и как определить, какая строка кода является проблемой. спасибо за ваше время и помощь

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

struct datum
{
    char nome, utente, ruolo, cartella, mese;
    int bo, giorni, data, ultimo_uso;
};


struct dato *leggi_file(FILE *f,int *size)
{   
    int i = 0;
    char buf[1000];
    int dim =4;
    struct dato *elenco;

    elenco = malloc(dim * sizeof(*elenco));

    while (fgets(buf, sizeof(buf), f))
    {
        sscanf(buf, "%s %d %s %s %d %s %d %d %s", 
            &elenco[*size].nome,
         &elenco[*size].bo, 
         &elenco[*size].utente, 
         &elenco[*size].ruolo,
         &elenco[*size].giorni,
         &elenco[*size].mese,
         &elenco[*size].data,
         &elenco[*size].ultimo_uso,
         &elenco[*size].cartella); 
        size += 9;
        if (i >= dim) {
            dim *= 2;
            elenco = realloc(elenco, dim * sizeof(*elenco));
        } 

    }return elenco;
}


void printa_tutto(struct dato *elenco, int size)
{
int i;
for (i=0; i<size; i+= 9)
    {
printf("%c %d %c %s %d %s %d %d %s\n", 
                elenco[i].nome, 
                elenco[i].bo, 
                elenco[i].utente, 
                &elenco[i].ruolo, 
                elenco[i].giorni, 
                &elenco[i].mese, 
                elenco[i].data, 
                elenco[i].ultimo_uso, 
                &elenco[i].cartella);
    }
}

int main(int argc,const char *arcv[1])
{


    FILE *f;
    int size = 0;
    struct dato *elenco;


    f = fopen(arcv[1], "r");

    elenco = leggi_file(f, &size);
    printa_tutto(elenco, size);
    return 0;
}
...