相关链接:https://blog.youkuaiyun.com/knowledgebao/article/details/85076661
浅拷贝指针覆盖问题。
下边代码包含:
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;
}
有任何问题,请联系:knowledgebao@163.com
本文探讨了在C++中使用浅拷贝时指针覆盖可能导致的数据丢失问题,通过具体代码示例,讲解了如何避免浅拷贝过程中指针指向的原始数据被意外删除,确保内存资源正确管理。
5338

被折叠的 条评论
为什么被折叠?



