浅拷贝指针覆盖问题。
下边代码包含:
1,结构体CHSYS_AV_DecParam
2,CHSYS_AV_DecParam的变量m_paramDec
3,函数Create
有两点需要注意:
第一:判断if (pParam != &m_paramDec)如果不进行判断,如果pParam == &m_paramDec,直接删除m_paramDec.pExtradata会导致pExtradata数据的丢失。
第二:删除指针m_paramDec.pExtradata必须在浅拷贝m_paramDec = *pParam之前。删除如果放在浅拷贝之后,实际删除的是pParam->pExtradata,如果不删除可能会造成内容泄漏。
typedef struct _CHSYS_AV_DecParam_{
unsigned char* pExtradata;
int nExtradataLen;
}CHSYS_AV_DecParam;
CHSYS_AV_DecParam m_paramDec;
int Create(CHSYS_AV_DecParam* pParam)
{
if (pParam != &m_paramDec)
{//如果相同,会造成m_paramDec.pExtradata丢失。
SAFE_DELETE_ARRAY(m_paramDec.pExtradata);//下边浅拷贝前销毁
m_paramDec = *pParam;
if (pParam->nExtradataLen > 0)
{
m_paramDec.pExtradata = NEW unsigned char[pParam->nExtradataLen];
if (m_paramDec.pExtradata != NULL)
{
memcpy(m_paramDec.pExtradata, pParam->pExtradata, pParam->nExtradataLen);
m_paramDec.nExtradataLen = pParam->nExtradataLen;
}
}
}
return 0;
}