我的代码没有编译错误。它似乎有一个运行时错误。在下面的一段代码中,当第一次执行while循环时,一切正常。但在第二次迭代中,所有内容停在“list :: iterator k =(temp2-> store).begin();”。当我注释掉“list :: iterator k ...”部分时,一切正常。变量temp2和temp2-> store不是NULL或空的。调试器给出了以下消息:“项目euler.exe中的0x009bc0cf未处理的异常:0xC0000005:访问冲突读取位置0xddddddf5”。我可以在while循环中定义一个迭代器吗?
struct edge
{ int end1, end2;
ptr_to_edge *ptr_end1, *ptr_end2;
edge *next, *l_chd, *r_chd;
edge(): next(NULL), l_chd(NULL), r_chd(NULL), ptr_end1(NULL), ptr_end2(NULL)
{ }
};
struct ptr_to_edge {
int flag, vertex;
list<edge*> store;
ptr_to_edge(): flag(1)
{ }
};
void parallel_reduction_step(ptr_to_edge *front, vector<edge> &a) {
list<edge*>::iterator next = (front->store).begin();
next++;
list<edge*>::iterator current = (front->store).begin();
list<edge*>::iterator last = (front->store).end();
--last;
while(current!= last) {
if(((*current)->end1 == (*next)->end1)&&((*current)->end2==(*next)->end2)) {
edge temp1;
temp1.end1 = (*current)->end1; temp1.end2 = (*current)->end2;
a.push_back(temp1);
ptr_to_edge *temp2;
if ((*current)->end1==front->vertex)
temp2 = (*current)->ptr_end2;
else
temp2 = (*current)->ptr_end1;
list<edge*>::iterator k = (temp2->store).begin();
current = (front->store).erase(j);
*current = &(a.back());
}
else current++;
next++;
}
};
对不起。如果我甚至无法阅读你的帖子,也无法帮助你。 – 2010-08-10 22:46:03
你的代码的第一个问题是你使用了太多的单字母变量,并且你嵌套了太多的块。这是完全不可读的。尝试使用明智的变量名称,并将该功能分解为组件部分,以便更容易理解和理解。 – 2010-08-10 22:47:55
@ user416689:第二次通过时temp2的值是多少?什么是temp2-> store的价值。我的猜测是temp2或temp2-> store是NULL。 – 2010-08-10 22:49:31