花2小时写的一个内存管理的小类,请大家看看。该如何解决

花2小时写的一个内存管理的小类,请大家看看。
#include   <afxmt.h>
#include   <afxtempl.h>
//不知道要不要考虑分页及字节对齐等使起始地址和大小有影响的东东
struct   MemInfo
{
unsigned   int   iMemSize;
bool   bUse;
void*   pMem;//标识内存的起始地址
};

typedef   CArray <MemInfo*,MemInfo*>   CMemArray;

class   CMemoryManager    
{
public:
bool   HasInit();
CMemoryManager();
virtual   ~CMemoryManager();
void*   MemNew(size_t   size);
void   MemDelete(void*   p);
bool   Init();//最开始来标识是否成功


private:
void   DoMemCombinate(int   iIndex,MemInfo*   pInfo);

private:
void*   m_pMem;
CMemArray   m_oMemArray;
CCriticalSection   m_cs;
HANDLE   m_hHeap;

};


CPP:

CMemoryManager::CMemoryManager()
{
m_pMem   =   NULL;
m_hHeap   =   NULL;
m_oMemArray.RemoveAll();
}

CMemoryManager::~CMemoryManager()
{
for(int   i   =   0;   i   <   m_oMemArray.GetSize();   i++)
{
MemInfo*   pInfo   =   m_oMemArray.GetAt(i);
delete   pInfo;
//dont   delete   pInfo-> pMem;
}
m_oMemArray.RemoveAll();
//256kb
if(NULL   !=   m_pMem)
{
HeapFree(m_hHeap,0x40000,m_pMem);
HeapDestroy(m_hHeap);
}
}

bool   CMemoryManager::Init()
{
m_hHeap   =   HeapCreate(HEAP_NO_SERIALIZE,0x40500,0x50000);
if(NULL   ==   m_hHeap)
{
return   false;
}
m_cs.Lock();
m_pMem   =   HeapAlloc(m_hHeap,HEAP_ZERO_MEMORY,0x40000);
if(NULL   ==   m_pMem)
{
m_cs.Unlock();
return   false;
}
//delete
MemInfo*   pInfo   =   new   MemInfo;
if(NULL   ==   pInfo)
{
m_cs.Unlock();
return   false;
}
pInfo-> pMem   =   m_pMem;
pInfo-> iMemSize   =   0x40000;
pInfo-> bUse   =   false;
m_oMemArray.Add(pInfo);
m_cs.Unlock();
return   true;
}

//要不要比size大点?
void*   CMemoryManager::MemNew(size_t   size)
{
MemInfo*   pTemp   =   NULL;//标识空闲块
unsigned   int   uiSize   =   0;
for(int   i   =   0   ;   i   <   m_oMemArray.GetSize();   i++)
{
MemInfo*   pInfo   =   m_oMemArray.GetAt(i);
if(NULL   !=   pInfo)
{
//找最小块
if(pInfo-> iMemSize   > =   size   &&   !pInfo-> bUse)
{
if(uiSize   <=   0)
{
uiSize   =   pInfo-> iMemSize;
pTemp   =   pInfo;
}
else
{
if(pInfo-> iMemSize   <   uiSize)
{
uiSize   =   pInfo-> iMemSize;
pTemp   =   pInfo;
}
}
}
}
}
if(NULL   ==   pTemp)
{
return   NULL;
}
m_cs.Lock();
if(pTemp-> iMemSize   ==   size)
{
pTemp-> bUse   =   true;
m_cs.Unlock();
return   pTemp-> pMem;
}
else
{
MemInfo*   pNewInfo   =   new   MemInfo;
pNewInfo-> iMemSize   =   size;
pNewInfo-> bUse   =   true;