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(),因此不确定问题出在哪里。