【发布时间】:2011-12-17 10:39:27
【问题描述】:
我正在尝试构建一个处理元素的通用列表 程序中的每个对象(指向结构的指针)都应该使用这个列表,
这就是 void* 的定义,从现在开始就是 Element。 以及添加函数签名:
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));
在调试创建用户函数并为其分配值时,在它返回之后似乎对象变为空,然后在添加元素处它粉碎。 这就是回报:
return toAdd;
'toAdd' 它是用户类型。 我做错了什么?
【问题讨论】:
-
如果不查看 CreateUser 和 AddElementToList 的相关部分,就无法判断出了什么问题。听起来您误用了基于堆栈的对象,但可能是任何东西。
-
在
typedefs 后面隐藏指针是个坏主意;指针的语义根本不同,隐藏会导致代码难以阅读。 -
顺便说一句,上面的
const使lineToSplit,指针,而不是它指向的东西,保持不变。您可能希望反过来:char const* lineToSplit或const char* lineToSplit(它们是等价的)。
标签: c list generics pointers void