我正在尝试构建一个处理Element的通用列表 程序中的每个对象(指向struct的指针)都应使用此列表
这是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));
在调试创建用户函数时执行的操作和分配给它的值,在它返回之后,它似乎变为空,然后在add元素处它被粉碎。 这是回报:
return toAdd;
'toAdd'是用户类型。 我做错了什么?
答案 0 :(得分:1)
没有更多信息很难说,但你需要注意对象范围:
- 你的CreateUser
函数必须使用FacebookUser_t
或类似的东西为堆上的malloc
对象分配内存,返回指向它的指针(类型User
;这就是为什么@OliCharlesworth警告隐藏在typedef后面的指针:User
不是用户对象,并且不分配内存)。
你的最后一行暗示了另一个可能的问题。您指出toAdd
是函数AddElementToList
的参数,然后您谈到返回'toAdd',但该函数的类型为'void'。恕我直言,这里有些令人困惑,您可能想要查看这些部分。