//代码的大概流程就是这样
typedef struct _MyStruct
{
    DWORD dw1;
    DWORD dw2;
    TCHAR sz1[MAX_PATH]
}MyStruct, *PMyStruct;vector<PMyStruct>  m_pVec;//保存结构体指针到vector
for(int i = 0; i < 10; i++)
{
    PMyStruct pStruct = new MyStruct;
    m_pVec.push_back(pStruct);
}//退出时释放指针
vector<PMyStruct>::iterator iter = m_pVec.begin();
for(; iter != m_pVec.end(); iter++)
{
    delete *iter
}
m_pVec.clear()
//m_pVec中保存了10个指针,泄漏的大小刚好是10*4,整整40字节。退出后,提示内存泄漏,而泄漏的地址xxxxxxxx【包含内容】恰好是m_pVec保存的指针地址.
就类似我new了10块内存,这些内存指针是保存在一个集合中。我把这10块内存给del掉了,而保存这10个地址的集合发生了泄漏。

解决方案 »

  1.   

    有可能是new了之后没有push进去?我最近做的东西跟你有一样的问题,就是因为提前做了new,之后判断符合条件的在push到vector里面,不符合条件的没有push,然后就泄露了。
      

  2.   

    我做判断了,不符合条件的直接del了。
      

  3.   

    得先释放结构体里数组的内存,然后在最后在释放结构体。就是这样的:
    //退出时释放指针 
    vector<PMyStruct>::iterator iter = m_pVec.begin();
    for(; iter != m_pVec.end(); iter++)
    {  
        //liuyy-A(2013.03.07)先释放结构体中数组内存   
        delete[] (*iter)->sz1;
        delete *iter;
        //liuyy-E

       m_pVec.clear()