У меня есть функция, которая должна читать из файла, создавать структуру данных и возвращаться. функция работает, непосредственно перед линией возврата все выглядит хорошо, и структура выглядит нормально. но тогда функция терпит неудачу с-
«Ошибка проверки во время выполнения № 2 — стек вокруг переменной «выход» был поврежден».
Файл содержит информацию об электростанциях и городах (вывод, местоположение, название и т. Д.). Некоторые строки являются городами, а некоторые — электростанциями, которые отличаются последним целым числом в строке (или его отсутствием). если он существует (давайте назовем его X), эта линия — электростанция, а следующие X линий — города, связанные с ней.
эта функция должен создать указатель на указатели станций (станции **) со всеми городами, подключенными к каждой станции.
station** read_from_file(FILE *file , station **power_grid){
int output , cities_connected ,i, counter = 0 ,j =0;
double x , y;
char name[256] = {0};
station *st;
while (fscanf(file, "%*c%[^\"]%*c%lf%lf%lf%d\n", name, &output, &x, &y, &cities_connected) != EOF){
counter++;
for( i = 0; i < cities_connected; i++){
fscanf(file , "%*c%[^\"]%*c%lf%lf%lf\n" , name , &output , &x ,&y);
}
}
power_grid = (station **)malloc(sizeof(station *)* counter);
rewind(file);
while (fscanf(file, "%*c%[^\"]%*c%lf%lf%lf%d\n", name, &output, &x, &y, &cities_connected) != EOF)
{
st = (station *)malloc(sizeof(station));
st->capacity = output;
st->cities_list = NULL;
st->num_of_cities = cities_connected;
st->name = (char *)malloc(strlen(name));
strcpy(st->name , name);
st->location[0] = x;
st->location[1] = y;
st->cities_list = (city **)malloc(sizeof(city *)*cities_connected);
for( i = 0; i < cities_connected; i++){
fscanf(file , "%*c%[^\"]%*c%lf%lf%lf\n" , name , &output , &x ,&y);
st->cities_list[i] = (city *)malloc(sizeof(city));
st->cities_list[i]->consumption = output;
st->cities_list[i]->location[0] = x;
st->cities_list[i]->location[1] = y;
st->cities_list[i]->name = (char *)malloc(strlen(name)+1);
strcpy(st->cities_list[i]->name , name);
}
power_grid[j] = st;
j++;
}
fclose(file);
return;
}
станции и городские строения-
typedef struct city {
char * name;
double location[2];
double consumption;
}city;
typedef struct station {
char * name;
double location[2];
city ** cities_list;
int num_of_cities;
double capacity;
}station;
Протестированный файл — здесь
fscanf(file, "%*c%[^\"]%*c%lf%lf%lf%d\n", name, &output,
: несоответствие типов. типoutput
-int
. - person BLUEPIXY   schedule 01.10.2017