。
我已經定義了一個半邊數據結構。代碼示例顯示了結構的一部分。函數調用後爲什麼指針不爲空?
struct edge
{
HalfEdge *he1; // pointer to right halfedge
HalfEdge *he2; // pointer to left halfedge
Edge *nexte; // pointer to next edge
Edge *preve; // pointer to previous edge
};
struct halfedge
{
Edge *edg; // pointer to parent edge
Vertex *vtx; // pointer to starting vertex
Loop *wloop; // back pointer to loop
HalfEdge *nexthe;// pointer to next halfedge
HalfEdge *prevhe;// pointer to previous halfedge
};
現在我已經用NULL初始化Edge的變量。
我在邊緣工作的方法。
void CDataStructureBuilder::create4VertFace(Face* f,Vertex* v1,Vertex* v2, Vertex* v3, Vertex* v4,Edge* e1,Edge* e2,Edge* e3,Edge* e4){
Loop outerLoop;
createHalfEdges(v1,v2,e1);
createHalfEdges(v2,v3,e2);
createHalfEdges(v3,v4,e3);
createHalfEdges(v4,v1,e4);
outerLoop.lface = f;
outerLoop.ledge = e1->he2;
connectEdges(e1, e2);
connectEdges(e2, e3);
connectEdges(e3, e4);
connectEdges(e4, e1);
如果我使用調試器,我看到e1的變量he1和he2包含0x000000。現在我稱之爲以下功能。
空隙CDataStructureBuilder :: createHalfEdges(頂點* V1,頂點V2 *,邊緣* ED){ 如果(ED-> HE2 == NULL){ 半邊* H =新半邊(); h-> vtx = v1; h-> edg = ed; ed-> he2 = h; } 如果{ 半邊* H =新半邊()((ED-> HE1)!); h-> vtx = v2; h-> edg = ed; ed-> he1 = h; } }
現在,如果我使用調試器,指針ed具有相同的地址,但變量he2和he1不再包含0x000000。它們包含0xccccccc。因此,方法createHalfEdges中的if-condition ed-> he2 == NULL爲false。
誰能告訴我,我在做什麼錯?
附加信息:
create4VertFace的外方法執行以下操作:
Vertex* vertices;
vertices = createVertices();
Edge* edges;
edges = createEdges();
create4VertFace(&bottom, &vertices[0], &vertices[1], &vertices[2], &vertices[3], &(edges[0]), &(edges[1]), &(edges[2]), &(edges[3]));
在createedges
我已經定義以下面的方式的邊緣。這可能是錯誤嗎?
Edge* CDataStructureBuilder::createEdges(void){
Edge edgelist[24];
Edge e0t1 = {NULL,NULL,NULL,NULL};
// ...
edgelist[0] = e0t1;
// ...
}
但爲什麼if中的條件總是假的?該imho與HalfEdge h無關。我首先要檢查變量ed-> he2和ed-> he1是否已經有地址,如果不是,我想添加必要的數據。如果我將if條件複製到外部方法並使用e1,則一切正常。 – martin
@martin:向我們展示更多代碼。你也可能在其他地方犯同樣的錯誤。 – NPE
我已經添加了一些信息 – martin