3.malloc与free在子函数中必须成双出现。
(1)原因:
因为当调用子函数结束后并不会像子函数中定义的其他变量一样在函数调用接受后被自动释放,而是会一直保持占有状态,因此对于子函数一定要切记free掉对应的空间。
(2)实际所犯错误:
FrameResult_t* FrameDecide(Uint32 t_ii , Uint32* pxx , DecideParam* decideParam)
{
//***省略
FrameData_t* decideData = (FrameData_t*)malloc(sizeof(FrameData_t));
if(deciData == NULL){
printf("malloc decideData error!!\n");
return NULL;
}
//***省略
return decideResult;
}
没有对malloc的指针进行free,由于该函数多次调用,导致Ram空间很快被占满,因此程序运行时会一直打印 "malloc decideData error!!"。