【发布时间】:2018-11-26 11:53:38
【问题描述】:
我正在使用 c 中的函数指针,因为我的自定义 API 库需要一个回调机制。 用一个简单的例子总结一下:
*userfunction*(SY_msg msg)
{
/* do something */
};
SY_msg 的大小为 1024 字节。 因此堆栈中有 1024 个字节。
指向 userfuncion() 的指针作为 calback_wrapper[] 中的第一个元素存在。
here is an example of use:
// (...) some code
SY_msg* msg;
msg = SYmalloc (sizeof(SY_msg)); /* it takes 1024 bytes in heap */
// (...) some code
calback_wrapper[0] (*msg); /* 1204 are passed by value */
/* during userfunction() execution , 1024 unused bytes are present in the heap */
free (msg); /* now finally heap is free */
// (...) some code
但我想要以下:
// (...) some code
SY_msg* msg;
msg = SYmalloc (sizeof(SY_msg)); /* it takes 1024 bytes in heap */
// (...) some code
memcpy(someplace,msg,sizeof(SY_msg); /* where "someplace" is a point in the stack referred by the argument of userfunction() */
free (msg); /* heap is free */
calback_wrapper[0] (*someplace); /* is starts userfunction() execution */
// (...) some code
有可能找到“某个地方”的地址吗? 我的编译器是 gcc。
【问题讨论】:
-
为什么不能简单地将分配留给调用者?
-
calback_wrapper[0] (*msg); /* 1204 are passed by value */你不能只传递msg而不是*msg并让函数期望一个指针而不是整个数据结构吗?据我了解,这是您自己的 API。你可以改变它。 -
不,我不能,因为谁会释放()味精?
-
内存管理必须对 userfunction() 不可见。
-
userfunction() 必须简单地按值接收 msg 结构,
标签: c pointers dereference call-by-value