问题描述
数组释放delete[] data ,报错:double free or corruption (out)
源代码如下:
void RcvProcDriver::SetBActAperSecIdx()
{
unsigned int act_aper_sec_idx = NULL;
act_aper_sec_idx = new unsigned int[1284];
unsigned int invalid_ch_sec_idx = new unsigned int[1282];
int len = 128*4;
m_Probe->GetActAperSecIdx(act_aper_sec_idx, invalid_ch_sec_idx);
// m_HwIO->WriteRam(BF_EDGE_SECOND_INDEX_COE_RAM, act_aper_sec_idx, len, 0xffffffff);
delete []act_aper_sec_idx;
delete [] invalid_ch_sec_idx;
}
---
# 原因分析:
m_Probe->GetActAperSecIdx(act_aper_sec_idx, invalid_ch_sec_idx);函数中有memcpy函数,拷贝长度超过分配的内存空间
memcpy(act_aper_sec_idx, (*data).ActiveAperList, sizeof((*data).ActiveAperList));
# 解决方案:
修改 memcpy(act_aper_sec_idx, (*data).ActiveAperList, sizeof((*data).ActiveAperList));中的长度sizeof((*data).ActiveAperList 数据类型为unsigned long ,改为
unsigned int 即可,这样符合项目64位系统的参数类型要求。