【问题标题】:return void* pointer from function into other function parameter将 void* 指针从函数返回到其他函数参数
【发布时间】: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* lineToSplitconst char* lineToSplit(它们是等价的)。

标签: c list generics pointers void


【解决方案1】:

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

你的最后一行暗示了另一个可能的问题。您指出toAdd 是函数AddElementToList 的参数,然后您谈到返回“toAdd”,但该函数是“void”类型。恕我直言,这里有些令人困惑,您可能需要查看这些部分。

【讨论】:

    猜你喜欢
    • 2020-06-11
    • 1970-01-01
    • 2020-09-08
    • 2020-05-03
    • 2018-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多