Добрый день! После помещения адреса массива структур в функцию и изменения некоторых полей, адрес массива изменяется. Я не так давно начал учиться, и не первый раз сталкиваюсь с этой проблемой, перерыл много ресурсов и никак не могу найти ответ: почему???))
Есть файл struct_list.h, в котором нечто подобное:
struct tegTODO_STRUCT
{
char task[100];
char date[15];
};
typedef struct tegTODO_STRUCT TODO;
В main.c я инициализирую массив структур:
...
TODO todo_list[100];
Далее идёт функция (вынесенная в отдельный файл operations.c, объявляется в operations.h): В main’е:
...
add_task(todo_list, ...);
...
Файл operations.h:
...
void add_task(TODO* todo_list, ...);
...
В самой функции я добавляю значения в одну структуру массива todo_list:
void add_task(TODO* todo_list, ...)
{
...
sscanf(task, "%[^\n]%*c", todo_list[i].task);
sscanf(task, "%s", todo_list[i].date);
}
После чего начинаются интересные и непонятные мне вещи. Причём код в одном файле работал, проблемы начались после экспериментов (хочу научиться на маленьких задачах делать большие проекты) с разнесением кода по разным файлам. Программа компилируется, запускается до места следующего использования данной структуры, дальше Segmentation falt. Выяснил, что внутри функции всё работает, данные в структуру записываются (выводил всё через printf в консоль). Веселье начинается на выходе из функции, при возвращении в main. Выводил адреса массива структур todo_list: в main’е до функции, внeтри функции до самого конца адрес массива один, а сразу после функции печатаю тот же адрес массива -, а он другой.. Соответственно, отсюда и Segmentation falt: адреса то нет такого. Объясните, пожалуйста, знающие люди, в чём загвоздка, и чего я не понимаю. Везде, где печатал адрес, строка:
printf("%d", todo_list);
Заранее спасибо!!!