最近在写A*算法,遇到一个问题,详细说来是这样的(源码太长我先说大概情况)
声明: vector<TAStarNode *> openlist; 是一个指针的vector
然后东西是这样放进去的:
有一个大的循环
{
TAStarNode * p=NULL;
while(!p)
p = new TAStarNode[8];
当然,接下来会给它们赋值。
然后用一个循环把这8个都取址之后push_back进openlist里边。
各种删除、修改处理
}
一直循环,也就是说,p指向的地址是不断改变的,而且中间还要用到那些点,没办法直接delete[] p。openlist中每个指针都只指向一个元素。
所以我就放在最后在一个函数SafeDel()里边delete全部了。查了些资料之后是这样子写:
iter=openlist.begin();
for(;iter!=openlist.end();)
{
delete *iter;
iter=openlist.erase(iter);
//erase会返回被删除迭代器后面那个
}
但是会卡住,调试发现是第一次执行到 delete *iter 就不会动了。
另外,看了前面问的也试过这样
for(int i=0;i<openlist.size();i++) delete openlist[i];
结果也一样。在delete那里卡住走不下去,光标一直闪啊闪。
源码太长,连剩下字数只够放头文件,所以就不发上来了
慕沐林林
一只甜甜圈
慕森王