내 코드에 컴파일 오류가 없습니다. 런타임 오류가있는 것 같습니다. 다음 코드에서는 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++;
}
};
죄송합니다. 내가 너의 글을 읽을 수 없다면 너를 도울 수 없어. –
코드에있는 첫 번째 문제점은 너무 많은 한 문자 변수를 사용하고 너무 많은 블록을 중첩한다는 것입니다. 완전히 읽을 수 없습니다. 의미있는 변수 이름을 사용하고 기능을 구성 요소로 분해하여 이해하고 이해하기 쉽도록하십시오. –
@ user416689 : 두 번째로 temp2의 값은 무엇입니까? temp2-> store의 가치는 무엇입니까? 내 생각 엔 temp2 또는 temp2-> store가 NULL이라는 것입니다. –