2017-03-08 6 views
-2

ポインタ配列は常に偶数インデックスC++

#ifndef _algorithm_ 
#define _algorithm_ 

namespace Sorting{ 
    int *bubble(int *dataPass, int dataSize); 
} 

#endif 

algo.h algo.cppのうち1を生成

#include "algorithm.h" 

int *Sorting::bubble(int *dataPass, int dataSize){ 
    for(int i = 0; i < dataSize; i++){ 
    for(int j = 0; j < dataSize; j++){ 
     cout<<dataPass[j+1]<<" < "<<dataPass[j]<<endl; 
     if(dataPass[j+1] < dataPass[j]){ 
     int tmp = dataPass[j]; 
     dataPass[j] = dataPass[j+1]; 
     dataPass[j+1] = tmp; 
     } 
    } 
    } 
    return dataPass; 
} 

私はソートライブラリを作りたいと私はバブルソートで始まります明らかに私は問題に直面している。この関数はなかった返される配列1,2,3,5,7を実行した後、例えば、私は、属性dataPass 配列[5] = {7,2,5,8,3}とDATASIZE 5を与え私は間違っている?配列には1はありませんが、ソートされたものは1と表示され、8がインデックス5にプッシュされていることがわかりましたので、配列が6になったので、何が起こったのか分かりません。

+0

このような問題を解決する適切なツールは、デバッガです。スタックオーバーフローを尋ねる前に、コードを一行ずつ進める必要があります。詳しいヘルプは、[小さなプログラムをデバッグする方法(Eric Lippert)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)を参照してください。最低限、問題を再現する[最小、完全、および検証可能](http://stackoverflow.com/help/mcve)の例と、その問題を再現するためのデバッガ。 –

+0

配列の索引付けにはさらに注意してください。 – molbdnilo

+0

ほんの少しのヒント: 'j = dataSize - 1'なら、配列インデックス' j + 1'のどの要素を指すのでしょうか? –

答えて

0

問題は内部ループにあります。データサイズは、例えば10であればj 9(それができる最後の値)であるとき、あなたはあなたの配列内の要素9と10を見ているので、要素jj+1を比較しているが、dataPass[10]は、配列の範囲を超えています。これは単純な修正です。ループをこれに変更してください。

for(int j = 0; j < dataSize-1; j++) 
0

エラーを引き起こすように2つのループを使用しています。サイズとインデックスが正しく定義されていません。配列のサイズとインデックスには注意してください。

for(int i = 0; i < dataSize; i++){ 
    for(int j = 0; j < dataSize-1; j++){ 
     if(dataPass[j+1] < dataPass[j]){ 
     int tmp = dataPass[j]; 
     dataPass[j] = dataPass[j+1]; 
     dataPass[j+1] = tmp; 
     } 
    } 
+0

このコードスニペットは歓迎されていますが、いくつかの助けを提供するかもしれませんが、* how *と* Why *がこれを解決する(説明があれば大幅に改善されます)(// meta.stackexchange.com/q/114762)問題。あなたが今質問している人だけでなく、将来読者のための質問に答えていることを忘れないでください!説明を追加するためにあなたの答えを[編集]し、どんな制限と前提が適用されるかを示してください。 –