2017-10-13 192 views
-2

我做了一個函數打印一個BTree在水平順序沒有遞歸的方式。運行時錯誤c項目

和我有一個問題找到我的錯誤..出現以下問題。

運行時檢查失敗#2 - 圍繞變量'pq'的堆棧已損壞。 如果有人能說出問題在哪裏,或者下次我可以如何找到它...? 如果需要,我添加完整的項目。所有的 enter link description here

void PrintTreeLevelOrder(bstree tree){  //The problem some where here..... 
    queue *pq = (queue*)malloc(sizeof(queue)); // is struct of : *front, *rear 

    node *current;// is struct of : root 
    create_queue(&pq);//create queue- items_num = 0,front = NULL,rear = NULL 

    if (tree.root == NULL) { 
     printf("Your Tree Is Empty:\n"); 
     return; 
    } 
    current = tree.root; 
    enqueue(current, &pq); 
    printf("Your Tree Displayed As Queue:\n"); 
    while ((size_of_queue(&pq))!=0) { 
     current = pq->front; 
     printf("%d ", current->data); 
     if (current->left != NULL) 
      enqueue(current->left, &pq); 

     if (current->right) 
      enqueue(current->right, &pq); 
      dequeue(&pq, &current); 

    } 

} 
+1

你以某種方式覆蓋內存,但是你可能會這樣做的所有功能都不在你的例子中。 –

+0

請製作[MCVE](強調__minimal__)。 –

+0

我添加一個鏈接到所有的功能和數據結構... –

回答

0

首先,我想說的是,你的算法是正確的,請閱讀以下。

您的代碼應採取的

  • 照顧您使用的PQ功能,以錯誤的方式多的錯誤,你傳遞一個指針的指針,而不是原來的指針,所以你改寫代碼
  • create_queue應該分配,除非你把它的init但是這不是主要的問題
  • 您應該檢查是否create_queue成功
  • 要保存在隊列中哪些是隊列*爲INT這是錯誤的,而不是便攜式的架構各色地址NT比32位
  • 要分配電流中的一個節點(節點樹結構)一queue_element元素指針結構,這也是不正確的,因爲它們是不同的類型和結構

請在這些問題上工作,如果你想要更多的細節請聯繫我 我會很樂意幫助