Я получаю одно и то же сообщение "Ошибка сегментации: 11"
GDB говорит мне, что точка останова находится сразу после основной функции. в строке, где я объявляю int j; я действительно не понимаю, как это может нарушить код.
ввод, который читает эта функция, состоит из одной строки, за которой следуют 2 числа, такие как
john 22 43 sam 11 23
все, что он должен сделать, это просто сохранить весь ввод в "elenco" и затем напечатать строки.
сначала я создал структуру, которая соответствует вводу. Затем я сделал функцию с целью чтения ввода и сохранения в переменной. затем я сделал функцию, чьи переменные являются выходными данными функции, которая читает входные данные (то есть входные) и печатает строки, заданные
. Может кто-нибудь помочь мне определить проблему и решить ее?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct
{
char name[20];
int distance;
int point;
} throw;
throw *read_file(FILE *f, int *j)
{
int i = 0;
int c;
int Dim = 32;
char buf[1000];
throw *list;
list = malloc(Dim *sizeof(*list));
if (list == NULL)
{
(*j) = 0;
return NULL;
}
while (fgets(buf, sizeof(buf), f)!= NULL)
{
sscanf(buf, "%19s %d %d",
list[*j].name,
&list[*j].distance,
&list[*j].point);
*j += 1;
if ( *j >= Dim)
{
Dim = Dim*2;
list = realloc(list, Dim *sizeof(*list));
if (list == NULL)
{
return NULL;
}
}
}
return list;
}
void print_everything(throw *list, int j)
{
int c;
for (c=0; c < j; c++ )
{
printf("%d\n",list[c].distance);
}
}
int main(int argc,const char *argcv[])
{
int j = 0;
FILE *file;
throw *list;
if (!( argc != 3))
{
printf("file's dimension is wrong\n");
return -1;
}
file = fopen(argcv[1], "r");
list = read_file(file, &j);
print_everything(list, j);
fclose(file);
return 0;
}
input1.txt
Марио 20 30
Джорджо 30 40
Марио 40 40
Давиде 32 20
Марио 9 32
это именно то, что файл содержал