C语言-含有指针的结构体浅拷贝注意事项

相关链接:https://blog.csdn.net/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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值