0
DLL의 메서드를 호출하는 EXE가 있습니다.CSimpleArray가 RemoveAll에서 충돌했습니다.
CSimpleArray가 ATL 클래스입니다 DLL의 방법으로 정의된다: 내가 m_mdFlags.RemoveAll를 호출 할 때, 그것은 free(m_aT);
에서 충돌
CSimpleArray<FlagData> m_mdFlags;
m_pDriverUtility->GetFlagsOfRun(m_lRunID, m_mdFlags);
로 EXE에서 메서드를 호출
class DriverUtility
{
....
virtual bool GetFlagsOfRun(int runID, CSimpleArray<FlagData> &flags) = 0;
};
struct FlagData
{
CString Name;
CString Value;
CString TypeName;
};
힙 오류가있는 주소 :
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()을 호출하므로 문제가 무엇인지 확실하지 않습니다.