c自由结构指针
在函数foo中,我没有手动分配空间,而是使用传入的trapframe struct参数直接初始化临时trapframe struct指针buf\u tf,是否需要手动释放buf\u tf?1)不,如果不需要释放传入的c自由结构指针,c,pointers,struct,free,C,Pointers,Struct,Free,在函数foo中,我没有手动分配空间,而是使用传入的trapframe struct参数直接初始化临时trapframe struct指针buf\u tf,是否需要手动释放buf\u tf?1)不,如果不需要释放传入的trapframe struct参数,则不需要释放它 2) 是的,如果必须最终释放传入的trapframe struct参数,那么您大概有如下内容: struct trapframe { u_int32_t tf_vaddr; /* coprocessor 0 v
trapframe struct参数,则不需要释放它
2) 是的,如果必须最终释放传入的trapframe struct参数
,那么您大概有如下内容:
struct trapframe {
u_int32_t tf_vaddr; /* coprocessor 0 vaddr register */
u_int32_t tf_status; /* coprocessor 0 status register */
u_int32_t tf_cause; /* coprocessor 0 cause register */
u_int32_t tf_lo;
.....
u_int32_t tf_hi;
u_int32_t tf_ra; /* Saved register 31 */
u_int32_t tf_at; /* Saved register 1 (AT) */
u_int32_t tf_v0; /* Saved register 2 (v0) */
u_int32_t tf_v1; /* etc. */
u_int32_t tf_epc; /* coprocessor 0 epc register */
};
void foo(void *tf, unsigned long as) {
struct trapframe *buf_tf = (struct trapframe *)tf;
... }
在这种情况下,内存是在调用者中分配的,您正在访问的是调用者的结构。你没有资格释放它。您不知道它被分配到哪里(堆或堆栈),调用方可能希望稍后访问它
或者可能:
void myfunc (struct trapframe *p)
{
struct trapframe *tf_tmp = p;
...
}
在这种情况下,结构通过副本传递,并放置在函数的本地堆栈上(尽管实现细节有所不同)。当当前函数退出时,它将被释放
所以不,不要试图释放它。这样做可能会破坏其他东西!对堆上未分配的对象执行free
,可能会产生未定义的不良影响。您的问题不太清楚。请显示您的代码。您似乎有混合的结构指针和struct somehowees,struct trapframe*tf应该由调用方函数使用,因此我无法通过函数foo中的buf_tf释放tf。
void myfunc (struct trapframe tf)
{
struct trapframe *tf_tmp = &tf;
...
}