2016-08-13 40 views
-3

我想創建一個分段樹,記性不好的alloc錯誤 - 段樹

這裏是我的樹的節點結構:

struct Node{ 
    int x1, x2; // x coordinates 
    int y1, y2; // y coordinates 
    Node * v1; 
    Node * v2; 
    Node * v3; 
    Node * v4; 
    bool oBo; //check if 1 by 1 
    bool O; 
    bool F; 
    int dimens; 
    Node(int myx1, int myx2, int myy1, int myy2){ 
     this->x1 = myx1; 
     this->x2 = myx2; 
     this->y1 = myy1; 
     this->y2 = myy2; 
     this->dimens = abs(x2 - x1); 
     if (dimens == 1) 
     { 
      this->oBo = true; 
     } 
     else 
      this->oBo = false; 

     this->O = false; 
     this->F = false; 

     this->v1 = NULL; 
     this->v2 = NULL; 
     this->v3 = NULL; 
     this->v4 = NULL; 
    } 
}; 

這是我的地圖

構造
MapTree::MapTree(int iSize) 
{ 
this->size = iSize; 
root = new Node(0, size, 0, size); 
segment(root); 
} 

我使用這個段函數來創建根段的子段,然後這個函數在root的子節點上被遞歸調用,等等。我在第二部分上遇到了不好的內存分配。即當維度= 2,我不知道爲什麼會發生這種情況。我試圖通過更改值和大小來修復它,但Visual Studio沒有提供任何明確的錯誤,除了在某些內存位置的內存不足之外。

這裏是分段函數:

void MapTree::segment(Node * node) 
{ 
while (node->oBo != true) 
{ 
    int dimension = node->dimens; 
    node->v1 = new Node(0, dimension/2, 0 , dimension/2); 
    node->v2 = new Node(dimension/ 2, dimension, 0, dimension/ 2); 
    node->v3 = new Node(0, dimension/2 , dimension/2, dimension); 
    node->v4 = new Node(dimension/2, dimension, dimension/2, dimension); 

    segment(node->v1); 
    segment(node->v2); 
    segment(node->v3); 
    segment(node->v4); 
} 

和最後但並非最不重要的樹給出的大小總是2使段總是會最終被一個由大小權力一個

+0

解決此類問題的正確工具是使用您的調試器,但不要在堆棧溢出之前詢問,並告訴我們您在檢查代碼時逐行逐行進行的所有觀察。 –

+0

TL; DR;你可能試圖用一個未初始化的變量來分配一些內存。 –

回答

0

沒關係,我找出了錯在哪裏,我想我沒有正確地在這裏提出我的問題。但經過一些調試後,我發現錯誤,循環再次從相同的位置調用,因此無限的內存分配。因爲根節點 - > oBo永遠不會是真的,因此無限循環和錯誤的內存分配。