我有以下功能来处理类型为Start_Vertex的点(在一组点中):
void handleStartVertex(Vertex vi)
{
cout << "start Vertex begins ######################################################################################" << endl;
cout << "Handling start " << vi << vertexType[vi.type] << endl;
HalfEdge *ei = vi.incidentEdge;
std :: vector<HalfEdge > :: iterator it,itprev;
cout << "Origin of the incident Edge " << *(ei->origin) << endl;
//INSERT EI IN TOW AND SET HELPER AS VI
ei->setHelper(&vi);
tow.push_back(*ei);
cout << "Content of Tow in START_VERTEX" << endl;
for(it = tow.begin();it != tow.end();it++)
cout << "origin of edge " << *((*it).origin) << " Helper " << *((*it).helper) << endl;
cout << "start Vertex stops ######################################################################################\n\n" << endl;
}
其中两个是:
vector<HalfEdge > tow;
问题是当我设置Edge的辅助器并将其推入矢量拖曳时,对于先前存在的所有边缘,辅助器变为当前推动的边缘的辅助器。我不明白为什么会这样?任何工作都值得赞赏。以下是一些可以使问题更清晰的结果。
开始Vertex开始############################################ ############################### 处理开始(2,9)START_VERTEX 事件边缘起源(2,9)
START_VERTEX中的拖车内容
边缘的起源(6,12)
助手(2,9)
边缘的起源(9,11) 助手(2,9)
边缘的起源(2,9) 助手(2,9)
start Vertex stop ############################################ ################################
我应该得到的正确结果是:
边缘的起源(6,12)助手(6,12)
边缘起源(9,11)助手(9,11)
边缘的起源(2,9)助手(2,9)
答案 0 :(得分:0)
Vertex vi在函数返回时被销毁。您正在将助手设置为Vertex vi占用的内存,当您执行最后一次打印时,此内存将被Vertex(2,9)占用。将指向Vertex vi的指针作为函数的输入传递:
void handleStartVertex(Vertex* vi)
{
...
}