比较经典的一个错误了,是关于函数返回值错误,具体例子如下!求解释!

我有一个函数,里面有malloc操作,然后返回他的oid* 指针,如:
void* fun();
void* b = fun();
却发现返回值b不是fun内部malloc返回的地址。
跟踪调试发现在 函数 fun 退出的时候 函数指针还正确,跟踪 寄存器 rax的值 也是正确的,但是当执行到
void* b = fun();之后,发现 b的值不正确。
我是多线程环境。
code
struct task* make_task_null()
{
struct task* t = (struct task*)malloc(sizeof(struct task));
clean_task(t);
return t;
}
void clean_task(struct task* t)
{
memset(t,0x00,sizeof(struct task));
}

fun()

{
strcut task* t = make_task_null();
}

Smart猫小萌
浏览 357回答 2
2回答

MMMHUHU

函数的返回值要用相应的类型的指针变量来接受它,如果是动态分配内存时可以将malloc强制转换成基类型或结构体类型。如:int *fun(){static int *p;p=(int*)malloc(100);return p;}// 接受部分:int *p=fun();
打开App,查看更多内容
随时随地看视频慕课网APP