我有一个调用 DLL 中方法的 EXE。
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(),所以不确定问题出在哪里。