2017-10-13 7 views
-2

私は、レベル順で再帰的な方法でBTreeを印刷する関数を作成します。実行時エラー - プロジェクト

私は間違いを見つけるのに問題があります。次の問題が表示されます。

ランタイムチェック失敗#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の機能を使用

  • の世話をする必要があり、複数の過ちを持って、あなたの代わりに、元のポインタのポインタへのポインタを渡されたので、あなたは、コード
  • を上書きinitを呼び出さない限り
  • CREATE_QUEUEを割り当てる必要がありますが、それはあなたが建築のdiffereのためのポータブル間違ってはないですintとして*キューされているキュー内のアドレスを保存しているCREATE_QUEUEが
  • に成功した場合は、チェックすべき主な問題
  • ではありませんNTあなたが
  • 彼らは、異なるタイプであるため、ノード(ノードツリー構造体)も正しくないqueue_element要素のポインタ構造体であり、これは現在およびアーキテクチャ

を割り当てている32ビット

  • これらの点で作業してくださいよりも、もしあなたは私に連絡してください詳細 私は助けてくれるでしょう