вернуть указатель void * из функции в другой параметр функции - PullRequest
0 голосов
/ 17 декабря 2011

Я пытаюсь создать общий список, который обрабатывает элемент (ы) каждый объект (указатель на структуру) в программе должен использовать этот список,

это определение для void *, отныне это элемент. и подпись функции добавления:

typedef void* Element;
void AddElementToList(List thisList , Element toAdd);

и функция создания пользователя и определение пользователя:

typedef struct FacebookUser_t* User;
User CreateUser(char* const lineToSplit);

вот как я вызываю функцию:

AddElementToList(thisServer->UsersList , (Element)CreateUser(line));

при отладке пользовательской функции create, выполняющей добро и присвоенные ей значения, сразу после ее возврата создается впечатление, что объект становится пустым, а затем при добавлении элемента он разрушается. это возвращение:

return toAdd;

toAdd - это тип пользователя. Что я делаю не так?

1 Ответ

1 голос
/ 17 декабря 2011

Трудно сказать без дополнительной информации, но вам нужно следить за областью объекта: - ваша функция CreateUser должна выделить память для объекта FacebookUser_t в куче, используя malloc или аналогичный, возвращая указатель на это (тип User; поэтому @OliCharlesworth предупреждает о скрытии указателей за typedef : User не является объектом пользователя и не выделяет память).

Ваша последняя строка предлагает другую возможную проблему. Вы указали toAdd как параметр для функции AddElementToList, затем вы говорите о возврате toAdd, но функция имеет тип void. Что-то здесь сбивает с толку ИМХО, и вы можете просмотреть эти разделы.

...