vc6.0做的动态库,定义了数据类型class A,A中包含CArray<class B, class B>
上层调用时,首先typedef CTypedPtrList<CObList,A *> DataAList;
DataAList C;添加数据如下:
A* dataA;
......
C.AddTail(dataA);
......释放时:
POSITION pos,pre;
pos = C.GetHeadPosition();
A* ptr = NULL;
while(pos)
{
  pre = pos;
  ptr = C.GetNext(pos);
  C.RemoveAt(pre);
  delete ptr;          //这里出错,错误内容就是File:dbgheap.c, Line:1011 Expression: _CrtIsValidHeapPointer(pUserData)
}
......这样的代码在VC6.0下使用正常,但是在VS2003调用就会报错,是什么原因呀,请大家帮忙解答一下,多谢了

解决方案 »

  1.   


    另外,你 delete ptr; 前应该先判断 ptr 是否为 NULL ,这样安全点
      

  2.   

    多谢大家的关注
    1.ptr已经做了判断的,不为NULL的时候才去delete的;
    2.即使不使用动态库,仅仅在2003的工程里面增加一个新的类去实现这种功能,也会出现同样的错误……
      

  3.   

    没有2003的环境.不过在2008下试没问题啊~楼主确定dataA赋值时都给的是堆内存地址了没?还有.释放时可以每次循环时delete掉C.GetNext(pos);返回的指针.
    循环外做C.RemoveAll();
    不知每次循环内来一次C.RemoveAt(pre);会不会影响链表的内部结构,即之前取的pos是否还有效