想不通,这段简单的代码会运行出错
编译通过,运行出错,就是函数会多次调用 SENSORS_ABILITY_FOR_TEST 类的析构函数,多次删除同一指针,导致程序出错。调用析构函数的可能原因是 1 是 临时变量 sa,sb在生命同期结束时调用,2 是vector push_pack时拷贝了 SENSORS_ABILITY_FOR_TEST ,最后vector结束时调用了vector容器里的数据的析构函数,但是问题这都是我具体的需要,我感觉代码没问题呀,我应该怎样写才能正常运行呢
//测试类说明: 类里有一个指针 unsigned char * ,LenOfSpcData保存指针指向内存区的长度
class SENSORS_ABILITY_FOR_TEST{
public:
unsigned char * m_SpcData; //用于保存与传感器类型相关的特殊数据
int LenOfSpcData;
public:
SENSORS_ABILITY_FOR_TEST& operator = (const SENSORS_ABILITY_FOR_TEST &src)
{
LenOfSpcData=src.LenOfSpcData;
if(LenOfSpcData)
{
if(m_SpcData)
delete[] m_SpcData;
m_SpcData=new unsigned char[LenOfSpcData];
memcpy(m_SpcData,src.m_SpcData,LenOfSpcData);
}
else
{
if(m_SpcData)
{
delete[] m_SpcData;
m_SpcData=NULL;
}
}
return *this;
}
SENSORS_ABILITY_FOR_TEST()
{
m_SpcData=NULL;
LenOfSpcData=0;
}
~SENSORS_ABILITY_FOR_TEST()
{
if(m_SpcData)
{
delete[] m_SpcData;
m_SpcData=NULL;
}
}
};
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWndEx::OnCreate(lpCreateStruct) == -1)
return -1;
///vector test
SENSORS_ABILITY_FOR_TEST sa;
sa.LenOfSpcData=12;
sa.m_SpcData=new unsigned char[sa.LenOfSpcData];
memset(sa.m_SpcData,1,sa.LenOfSpcData);
SENSORS_ABILITY_FOR_TEST sb;
sb=sa;
memset(sb.m_SpcData,2,sb.LenOfSpcData);
vector<SENSORS_ABILITY_FOR_TEST> m_SENSORS_ABILITY_TEST,m_SENSORS_ABILITY_TEST1;
m_SENSORS_ABILITY_TEST.push_back(sa);
m_SENSORS_ABILITY_TEST.push_back(sb);
m_SENSORS_ABILITY_TEST1=m_SENSORS_ABILITY_TEST;
vector<SENSORS_ABILITY_FOR_TEST>::iterator it=m_SENSORS_ABILITY_TEST.begin();
return 0;
}