LINUX.ORG.RU

Сообщения konsin1988

 

Изменение адреса массива структур после выхода из функции

Добрый день! После помещения адреса массива структур в функцию и изменения некоторых полей, адрес массива изменяется. Я не так давно начал учиться, и не первый раз сталкиваюсь с этой проблемой, перерыл много ресурсов и никак не могу найти ответ: почему???))

Есть файл 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);

Заранее спасибо!!!

 , , , ,

konsin1988
()

RSS подписка на новые темы