我有一個(gè)函數(shù),里面有malloc操作,然后返回他的oid* 指針,如:void* fun();void* b = fun();卻發(fā)現(xiàn)返回值b不是fun內(nèi)部malloc返回的地址。跟蹤調(diào)試發(fā)現(xiàn)在 函數(shù) fun 退出的時(shí)候 函數(shù)指針還正確,跟蹤 寄存器 rax的值 也是正確的,但是當(dāng)執(zhí)行到void* b = fun();之后,發(fā)現(xiàn) b的值不正確。我是多線程環(huán)境。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貢獻(xiàn)1834條經(jīng)驗(yàn) 獲得超8個(gè)贊
函數(shù)的返回值要用相應(yīng)的類型的指針變量來接受它,如果是動(dòng)態(tài)分配內(nèi)存時(shí)可以將malloc強(qiáng)制轉(zhuǎn)換成基類型或結(jié)構(gòu)體類型。
如:
int *fun(){
static int *p;
p=(int*)malloc(100);
return p;
}
// 接受部分:
int *p=fun();
添加回答
舉報(bào)
0/150
提交
取消