STL vector和内存问题typedef struct _tag_MyPackage
{
int len;
char *data;
}MyPackage;收到数据后
MyPackage *mp = new MyPackage;
mp->data = new char[某个长度]
memcpy(mp->data, ...);
EnterCriticalSection(&m_cs);
mylist.pushback(mp);
LeaveCriticalSection(&m_cs);某个条件触发,另一线程通过
EnterCriticalSection(&m_cs);
for(iterator = mylist.begin(); iterator != mylist.end(); ++iterator)
{
if (某个条件)
{
MyPackage *mp = *iterator;
memcpy(某个另外定义的指针,mp->data, mp->len);

if (mp != NULL && mp->data != NULL)
{
delete [](mp->data);
delete mp;
}
mylist.erase(iterator);
}
LeaveCriticalSection(&m_cs);
}如此使用,程序绝大多数运行良好,当mp->data指向的数据段比较小时,运行也完全正常。
但,我发现有时候delete[](mp->data);这行会出错,而出错时指向的数据多为比较长,
如220000bytes。请大家帮我看看,问题究竟出在何处,多谢!

解决方案 »

  1.   

    mylist.erase(iterator);   最好全部做完后一起erase
    LeaveCriticalSection(&m_cs);这句话应该在for外面吧
      

  2.   

    hchinside
    erase的建议,我接收,呵呵。因为这里的代码贴的不完全,所以你看起来可能有些别扭,
    实际上leavecriticalsection之后马上return了,呵呵。
      

  3.   

    因为我的程序是被其他程序调用的,我这里只能得到windows的一个断言错误
    指明堆出了问题,
    Program:D:\work\myapp\test.exe
    File: dbgheap.c
    Line:1044Expression: _CrtIsValidHeapPointer(pUserData)For information on how your program can cause an assertion
    failure, see the Visual C++ documentation on asserts.(Press Retry to debug the application)还有几个地址,
    应用程序发生异常 未知的软件异常(0x0eedfade), 位置为0x77e8bbf3还有一个
    Runtime error 217 at 000800D2
      

  4.   

    最好自己写一个链表类,不用stl,stl不是线程安全的,会出现很多问题。
      

  5.   

    楼主用的是mfc的还是port的stl
    vc对stl支持不是很完善