2017-03-29 5 views
0

プログラムのバックグラウンドは、リンクリストを使用して優先順位キューを作成します。ユーザーが優先度を入力するたびに(cinとwhileループを使用して)データは* queue [25]配列に挿入されます。配列内の要素を移動するSIGABRTエラー

私の問題は、すべてのデータをエンキューし、-1を入力して終了すると、プログラムが配列を正しく出力してからSIGABRTエラーがスローされることです。問題は、私はこの行をコメントアウトすると、プログラムが私に与えていない

queuef[i] = queuef[i-1]; 

このラインである、具体的に

void enqueue(Node *queuef[25], int priority, Node *temp) 
{ 
    if (queuef[priority] == NULL) { 
     queuef[priority] = temp; 
    } else { 
     int pos = 25; 
     for (int i = 25; i > priority; i--) 
     { 
      if (queuef[priority+1] == 0) 
      { 
       queuef[priority+1] = temp; 
       break; 
      } else { 
       queuef[i] = queuef[i-1]; 
       pos--; 
      } 
     } 
     queuef[pos] = temp; 

    } 
    cout << queuef; 
} 

問題は、私のエンキュー機能内にありますエラー。なぜこのエラーが出るのか分かりません。

+0

queuefにアクセスするために使用するインデックスが有効であることを確認してください。 0以上25以下でなければなりません。コードの値をデバッグして、インデックスの値を確認してください。 – seleciii44

答えて

0

おそらく、queuef配列の範囲外にアクセスしている可能性があります。パラメータ宣言で主張されている要素が25個の場合は、最初にiループを経由してqueuef[25]に書き込むと、配列の最後を過ぎて未定義の動作とクラッシュが発生します。

関連する問題