大家都知道,要删除一个数组,指针名前只用一对方括号符,并且不管所删除数组的维数,忽略方括号内的任何数字。
如:
int *p;
p = new int[10];
delete[] p;
如果要删除一个结构体指针
typedef struct tagrelaNote
{//邻域关系节点类型
int id;/
int edgeLength;
}relaNote,*lprelaNote;
ralaNote seg=new ralaNote;
直接delete seg;seg=null;就可以了;
但是如果我要删除一个包含结构体指针数组该怎么办呢?下面是我定义的结构体和结构体指针
typedef struct tagrelaNote
{//邻域关系节点类型
int id;
int edgeLength;
}relaNote,*lprelaNote; typedef struct tagneiSegs
{//所含邻域类型
int neiNum;//所含邻域个数
int segId;
int merFlag;
relaNote* relanote;//包含的邻域关系节点
}neiSegs, *lpneiSegs;
neiSegs* allneiSeg = new neiSegs[10];
下面我为数组中每个成员的ralaNote都分别开辟空间并分别赋值用于计算;请各位高手帮忙,我用完了这个数组allneiSeg,我该怎么释放它?
delete[] allneiSeg;应该释放不干净吧?
因为我下面出现堆栈溢出的问题,觉得可能是哪里空间没释放彻底,谢谢大家:)
如:
int *p;
p = new int[10];
delete[] p;
如果要删除一个结构体指针
typedef struct tagrelaNote
{//邻域关系节点类型
int id;/
int edgeLength;
}relaNote,*lprelaNote;
ralaNote seg=new ralaNote;
直接delete seg;seg=null;就可以了;
但是如果我要删除一个包含结构体指针数组该怎么办呢?下面是我定义的结构体和结构体指针
typedef struct tagrelaNote
{//邻域关系节点类型
int id;
int edgeLength;
}relaNote,*lprelaNote; typedef struct tagneiSegs
{//所含邻域类型
int neiNum;//所含邻域个数
int segId;
int merFlag;
relaNote* relanote;//包含的邻域关系节点
}neiSegs, *lpneiSegs;
neiSegs* allneiSeg = new neiSegs[10];
下面我为数组中每个成员的ralaNote都分别开辟空间并分别赋值用于计算;请各位高手帮忙,我用完了这个数组allneiSeg,我该怎么释放它?
delete[] allneiSeg;应该释放不干净吧?
因为我下面出现堆栈溢出的问题,觉得可能是哪里空间没释放彻底,谢谢大家:)
但是tagneiSegs ::relanote指针指向的内存空间不会被删除的(如果你申请了控件的话)。建议使用list或CList
for (int i=0;i<subSegNum;i++)
{
for (int j=0;j<allneiSeg[i].neiNum;j++)
{
delete allneiSeg[i].relanote[j];
}
delete allneiSeg[i];
}
可是我这么做编译说delete无法从ralaNote转化为void*
应该怎么改呢?
我没有使用链表,只是定义了我需要的与链表结构类似的这种结构...谢谢大家
{ delete [] allneiSeg[i].relanote;
}
delete [] allneiSeg;
根据楼上启发,我现在改成这个样子了,编译通过了,应该能释放干净了吧?但是还是有内存泄露问题,我怀疑是不是其它地方...谢谢大家,结贴就有分:)
{//邻域关系节点类型
int id;
int edgeLength;
}relaNote,*lprelaNote; typedef struct tagneiSegs
{//所含邻域类型
int neiNum;//所含邻域个数
int segId;
int merFlag;
relaNote* relanote;//包含的邻域关系节点 tagneiSegs()
{
tagneiSegs = NULL;
}
~tagneiSegs()
{
if(relanote != NULL)
{
delete relanote;
relanote = NULL;
}
}
}neiSegs, *lpneiSegs; neiSegs* allneiSeg = new neiSegs[10]; ...delete[] allneiSeg;所有内存都可以释放!
{//邻域关系节点类型
int id;
int edgeLength;
}relaNote,*lprelaNote; typedef struct tagneiSegs
{//所含邻域类型
int neiNum;//所含邻域个数
int segId;
int merFlag;
relaNote* relanote;//包含的邻域关系节点 tagneiSegs()
{
relanote = NULL; //刚才这里写错了。
}
~tagneiSegs()
{
if(relanote != NULL)
{
delete relanote;
relanote = NULL;
}
}
}neiSegs, *lpneiSegs; neiSegs* allneiSeg = new neiSegs[10]; ... delete[] allneiSeg; 所有内存都可以释放!