1
int size = 0;
int sorted[] = {};
int symbols[] = {8, 9, 13, 16, 16, 16, 17, 17, 17, 18, 18, 18, 20, 20, 27, 
    32, 33, 34, 35, 36, 37, 38, 39, 40, 44, 45, 46, 48, 48, 48, 49, 49, 49, 49, 
    50, 50, 50, 50, 51, 51, 51, 51, 52, 52, 52, 53, 53, 53, 54, 54, 54, 55, 55, 
    55, 56, 56, 56, 57, 57, 57, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 
    77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 93, 112, 113, 
    114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 160, 161, 161, 162, 162, 
    163, 164, 164, 165, 186, 186, 186, 187, 187, 187, 188, 188, 188, 188, 189, 
    189, 189, 190};

int i = 0;
while(symbols[i] != 190){
    size++;
    if(symbols[i+1] == 190) {
        size++;
    }
    i++;

}

int indx = 0;
for(int i = 0; i < size-1; i++) {
    if(symbols[i] != symbols[i+1]) {
        sorted[indx] = symbols[i];
        indx++;
    }
}

問題が見つかりません。何が未定義の動作を引き起こす可能性がありますか? for ループ後の size 変数は 27 (123 のはず) になりましたが、これは変更しません。完全に迷子になり、問題の原因がどこにあるのかわかりません。

4

3 に答える 3

4
int sorted[] = {}

OK...ソート済みは要素のない配列です。一部のコンパイラは、これについて警告します。

test.cpp(217) : error C2466: cannot allocate an array of constant size 0

しかし、それがコンパイラで機能し、定数サイズ 0 の配列を作成すると仮定しましょう。あなたのコードはこれを行います:

sorted[indx] = symbols[i];

おい!ここで何が起こっているのか...sorted何も保存するスペースがありません。その書き込みの結果、未定義の動作が発生します。クラッシュしたり、メモリが上書きされたり、コンピュータが銀行口座に... 100... 億... ドルを追加したりする可能性があります。

于 2013-06-08T21:48:26.787 に答える
2
int sorted[] = {}

これにより、要素が 0 の配列が作成されます。

于 2013-06-08T21:48:59.833 に答える