Я должен выделить структуру из другой функции, очевидно, используя указатели.
Я часами смотрел на эту проблему и пытался решить ее миллионами разных способов.
Это пример кода (очень упрощенный):
...
some_struct s;
printf("Before: %d\n", &s);
allocate(&s);
printf("After: %d\n", &s);
...
/* The allocation function */
int allocate(some_struct *arg) {
arg = malloc(sizeof(some_struct));
printf("In function: %d\n", &arg);
return 0;
}
Это дает мне один и тот же адрес до и после вызова выделения:
Before: -1079752900
In function: -1079752928
After: -1079752900
Я знаю, что это, вероятно, потому что это делает копию в функции, но я не знаю, как на самом деле работать с указателем, который я дал в качестве аргумента. Я попытался определить some_struct * s вместо some_struct s, но безуспешно. Я пробовал с:
int allocate(some_struct **arg)
, который работает просто отлично (необходимо также изменить функцию allocate), НО в соответствии с назначением я НЕ МОГУ изменить объявление, и оно ДОЛЖНО быть * arg .. должны объявить some_struct *. Не some_struct * s.
Назначение функции выделения - инициализация структуры (a some_struct), которая также включает ее выделение.
Еще одна вещь, которую я забыл упомянуть. Возвращаемый 0 в функции allocate зарезервирован для некоторых сообщений о состоянии, и поэтому я не могу вернуть адрес, используя это.