Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 将void*指针从函数返回到其他函数参数_C_List_Generics_Pointers_Void - Fatal编程技术网

C 将void*指针从函数返回到其他函数参数

C 将void*指针从函数返回到其他函数参数,c,list,generics,pointers,void,C,List,Generics,Pointers,Void,我正在尝试构建一个处理元素的通用列表 程序中的每个对象(指向结构的指针)都应使用此列表 这是void*的定义,从现在起它就是元素。 和添加函数签名: typedef void* Element; void AddElementToList(List thisList , Element toAdd); 以及创建用户功能和用户定义: typedef struct FacebookUser_t* User; User CreateUser(char* const lineToSplit); 这就

我正在尝试构建一个处理元素的通用列表 程序中的每个对象(指向结构的指针)都应使用此列表

这是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 user函数并为其分配值时,在它返回后,对象似乎变为空,然后在add元素处被压碎。 这就是回报:

return toAdd;
“toAdd”是用户类型。
我做错了什么?

没有更多信息很难说,但您需要注意对象范围: -您的
CreateUser
函数必须使用
malloc
或类似方法,为堆上的
FacebookUser\t
对象分配内存,并返回指向该对象的指针(键入
User
;这就是@OliCharlesworth警告将指针隐藏在typedef后面的原因:
User
不是用户对象,并且不分配内存)


您的最后一行提示了另一个可能的问题。您指出
toAdd
是函数
addlementtolist
的一个参数,然后您谈到返回“toAdd”,但函数的类型是“void”。这里有些东西让人困惑,您可能需要查看这些部分。

如果不看到这些部分,就无法判断出问题所在e CreateUser和AddElementToList的相关部分。听起来你在错误地使用基于堆栈的对象,但可能是任何对象。将指针隐藏在
typedef
s后面是个坏主意;指针的语义是根本不同的,隐藏可能会导致代码难以阅读。顺便说一句,上面的
const
使
lineToSplit
,指针,而不是它指向的对象,是常量。您可能希望它以另一种方式运行:
char const*lineToSplit
const char*lineToSplit
(它们是等效的)。