Что произойдет, если я clear
a vector
, который уже был очищен ранее?
Я попробовал это в Visual Studio, и это не привело к ошибкам во время выполнения. Но я ищу возможную причину исключения (ниже) И хотел бы знать, может ли это быть причиной?
*** glibc detected *** process.out: double free or corruption (out): 0x01a0b588 ***
Обновление кода:
bool myclass::Sort(SortType enSortOption)
{
bool bRet = TRUE;
m_oVecOfIntsOrig.clear();
m_oVecOfIntsSorted.clear();
for(int i = 0;i<m_oList.listsize();i++)
{
m_oVecOfIntsOrig.push_back(i);
}
m_oVecOfIntsSorted = m_oVecOfIntsOrig;
//Just sort the indices
switch(enSortOption)
{
case Alpha:
{
t_SortStructAlpha sSortAlpha(this);
sort( m_oVecOfIntsSorted.begin(), m_oVecOfIntsSorted.end(), sSortAlpha );
}
break;
case Dist:
{
t_SortStructDist sSortDist(this);
sort( m_oVecOfIntsSorted.begin(), m_oVecOfIntsSorted.end(), sSortDist );
}
break;
case none:
{
//Nothing to do
return TRUE;
}
break;
default:
{
bRet = FALSE;
}
break;
}
//Update the list based on sorted index vector
ListElem oSortedListElements;
//this clear function simply clears all the 7 constituent vectors.
oSortedListElements.vClear();
if(TRUE == bGetSortedList(oSortedListElements))
{
//If successfully copied to temp object, then update member variable
//m_oList is what I'm intending to display
m_oList.vClear();
m_oList = oSortedListElements;
}
else
{
//copy failed
bRet = FALSE;
}
return bRet;
}
bool myclass::bGetSortedList(ListElem& oSortedListElements)
{
bool bRet = TRUE;
//Creating object from beginning, so clear old contents if any
oSortedListElements.vClear();
/* Sort done. Now update the list based on new indices*/
for(int u16Index = 0; u16Index<m_oVecOfIntsSorted.size(); u16Index++)
{
if(
(m_oVecOfIntsSorted.at(u16Index) >= m_oListConstituents.oVec1.size())
||
(m_oVecOfIntsSorted.at(u16Index) >= m_oListConstituents.oVec2.size())
||
(m_oVecOfIntsSorted.at(u16Index) >= m_oListConstituents.oVec3.size())
||
(m_oVecOfIntsSorted.at(u16Index) >= m_oListConstituents.oVec4.size())
||
(m_oVecOfIntsSorted.at(u16Index) >= m_oListConstituents.oVec5.size())
||
(m_oVecOfIntsSorted.at(u16Index) >= m_oListConstituents.oVec6.size())
||
(m_oVecOfIntsSorted.at(u16Index) >= m_oListConstituents.oVec7.size())
)
{
//out of bounds check
return FALSE;
}
//m_oListConstituents contains overall list
oSortedListElements.oVec1.push_back(m_oListConstituents.oVec1.at(m_oVecOfIntsSorted.at(u16Index)));
oSortedListElements.oVec2.push_back(m_oListConstituents.oVec2.at(m_oVecOfIntsSorted.at(u16Index)));
oSortedListElements.oVec3.push_back(m_oListConstituents.oVec3.at(m_oVecOfIntsSorted.at(u16Index)));
oSortedListElements.oVec4.push_back(m_oListConstituents.oVec4.at(m_oVecOfIntsSorted.at(u16Index)));
oSortedListElements.oVec5.push_back(m_oListConstituents.oVec5.at(m_oVecOfIntsSorted.at(u16Index)));
oSortedListElements.oVec6.push_back(m_oListConstituents.oVec6.at(m_oVecOfIntsSorted.at(u16Index)));
oSortedListElements.oVec7.push_back(m_oListConstituents.oVec7.at(m_oVecOfIntsSorted.at(u16Index)));
}
return bRet;
}