我用了二重CPtrlist
第一重CPtrList中存放了几个CPtrlist对象的指针,new出来的
第二重CPtrList中存放了几个自定义的数组,也是new出来的
但是在释放内存的时候出错,说第二重CptrList的getNext函数Access Viloate分配内存:
for(i = 0 ; i<nComputeNum ;i++)
{
CPtrList *p = new CPtrList;
for(int j = 0 ; j < (*pTargetNum) ; j++)
{
_FusedDataPackage *pFused = new _FusedDataPackage[WSS_MAXDOTNUMBER];
p->AddTail(pFused);
}
pDoc->m_ptrFuseData.AddTail(p);
}
释放内存:
//销毁二重队列,比较大块的内存
POSITION pos;
CPtrList *p;
pos=m_ptrFuseData.GetHeadPosition();
while(pos!=NULL)
{
p=(CPtrList *)m_ptrFuseData.GetNext(pos);
//----------------------内层-------------------------
POSITION posIn;
_FusedDataPackage * pFused;
posIn = p->GetHeadPosition();
while(posIn!=NULL)
{
pFused = (_FusedDataPackage *)(p->GetNext(posIn));//**************************************
delete [] pFused;//销毁内层的队列 _FusedDataPackage[WSS_MAXDOTNUMBER]
}
//----------------------~内层----------------------------- p->RemoveAll();
delete p;//销毁外层的CPtrList指针
}
m_ptrFuseData.RemoveAll();上面的**************************************处报错,说Access violate
求助!
第一重CPtrList中存放了几个CPtrlist对象的指针,new出来的
第二重CPtrList中存放了几个自定义的数组,也是new出来的
但是在释放内存的时候出错,说第二重CptrList的getNext函数Access Viloate分配内存:
for(i = 0 ; i<nComputeNum ;i++)
{
CPtrList *p = new CPtrList;
for(int j = 0 ; j < (*pTargetNum) ; j++)
{
_FusedDataPackage *pFused = new _FusedDataPackage[WSS_MAXDOTNUMBER];
p->AddTail(pFused);
}
pDoc->m_ptrFuseData.AddTail(p);
}
释放内存:
//销毁二重队列,比较大块的内存
POSITION pos;
CPtrList *p;
pos=m_ptrFuseData.GetHeadPosition();
while(pos!=NULL)
{
p=(CPtrList *)m_ptrFuseData.GetNext(pos);
//----------------------内层-------------------------
POSITION posIn;
_FusedDataPackage * pFused;
posIn = p->GetHeadPosition();
while(posIn!=NULL)
{
pFused = (_FusedDataPackage *)(p->GetNext(posIn));//**************************************
delete [] pFused;//销毁内层的队列 _FusedDataPackage[WSS_MAXDOTNUMBER]
}
//----------------------~内层----------------------------- p->RemoveAll();
delete p;//销毁外层的CPtrList指针
}
m_ptrFuseData.RemoveAll();上面的**************************************处报错,说Access violate
求助!
解决方案 »
- vc能调用C#做的ActiveX吗?求实例~
- CArray<CMyClass&,CMyClass>和CArray<CMyClass,CMyClass>有什么区别
- 如何制作圆角窗口?
- 欢迎大家提供文章信息!
- 数据类型转换和其它问题
- 多线程导致fopen()调用阻塞???
- VC应该如何上手!
- 求旋转ico到任意角度的源代码!只有20分了,有了再加!
- 我最要好的朋友的父亲得了乙型肝炎,快转成肝癌了,请问哪里有好的医院和治疗方法?(请版主不要删!帮忙置顶一下)
- 我的vc开发环境常常会有这样的情况:///极极极极极极!!!
- 本人想做一个配置,连接,更改连接数据库的程序,各位有何高见?
- 暴简单的问题——为什么我在网上下载的vc程序不能在我的vc6.0中打开
pDoc->m_ptrFuseData.AddTail(p);
改为:
pDoc->m_ptrFuseData.AddTail((void *)p);因为前者把p指向的list接在m_ptrFuseData后面,后者则把指针p作为一个元素
添加到m_ptrFuseData中。
那就是说加入是必须使用void *强制转换才能只加入一个指针
呵呵
msdn没有仔细看
多谢了