0
我有一個EXE調用DLL中的方法。CSimpleArray墜毀在RemoveAll
在DLL的方法被定義爲,其中CSimpleArray是ATL類:
class DriverUtility
{
....
virtual bool GetFlagsOfRun(int runID, CSimpleArray<FlagData> &flags) = 0;
};
struct FlagData
{
CString Name;
CString Value;
CString TypeName;
};
我調用EXE的方法
CSimpleArray<FlagData> m_mdFlags;
m_pDriverUtility->GetFlagsOfRun(m_lRunID, m_mdFlags);
當我打電話m_mdFlags.RemoveAll,它崩潰在free(m_aT);
與堆錯誤在:
void RemoveAll()
{
if(m_aT != NULL)
{
for(int i = 0; i < m_nSize; i++)
m_aT[i].~T();
free(m_aT);
m_aT = NULL;
}
m_nSize = 0;
m_nAllocSize = 0;
}
據我所知,當分配內存上堆應該在本地釋放。我在調用者(EXE)中創建對象,並從調用者調用RemoveAll(),因此不確定問題出在哪裏。