【发布时间】:2020-08-13 23:47:10
【问题描述】:
我有一个回调函数void string_cb(char* data, size_t size, void* str),它使用原型void callback_decl (char* data, size_t size, void* ret_val),其中最后一个参数是返回值。因为我的回调需要为带有malloc() 的字符串分配内存,所以我需要将void* str 的地址更改为分配的内存块。是否可以在不更改回调原型的情况下为 str 分配新地址?
【问题讨论】:
-
你能提供更多细节吗?我假设您正在将此回调传递给某个库?如果是,是什么库以及其中的什么功能?
-
这取决于该参数中实际传递的内容。如果调用者传入
char **,则可以返回新分配的内存。您必须提供更多上下文。 -
提供callback_decl和string_cb的代码,只提供你用于callback的部分,还清理内存问题?很难理解你正在尝试做什么。
-
这显然行不通。正如我所说,如果调用者传入一个双指针,那么您可以执行以下操作:
char **ret = ret_ptr; *ret = malloc();。所以调用者和回调函数之间需要有一个理解。否则是不可能的。
标签: c