为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Smart猫小萌 2021-07-23 15:15:04
我有一个函数,里面有malloc操作,然后返回他的oid* 指针,如:void* fun();void* b = fun();却发现返回值b不是fun内部malloc返回的地址。跟踪调试发现在 函数 fun 退出的时候 函数指针还正确,跟踪 寄存器 rax的值 也是正确的,但是当执行到void* b = fun();之后,发现 b的值不正确。我是多线程环境。codestruct 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();}
查看完整描述

2 回答

?
MMMHUHU

TA贡献1834条经验 获得超8个赞

函数的返回值要用相应的类型的指针变量来接受它,如果是动态分配内存时可以将malloc强制转换成基类型或结构体类型。
如:
int *fun(){
static int *p;
p=(int*)malloc(100);
return p;
}

// 接受部分:
int *p=fun();

查看完整回答
反对 回复 2021-07-29
  • 2 回答
  • 0 关注
  • 400 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信