2

関数に渡した後、配列からガベージを取得する際に問題が発生します。これは、出力するだけの関数に渡す正しい方法ですか?

while(infile){
        infile >> batch;
        infile >> amount;
        cout << batch << "     " << amount<< endl;
        totalChocolates[batch-1]+=amount;   
        chocolateBatches[batch-1]++;

    }

    //header();
    print(totalChocolates,chocolateBatches);

    system("pause");
    return 0;

void print(int *total,int *batch)
{
    for(int i = 0;i<size;i++)
    {
        cout << i+1 << "     "  << batch[i] << "     " << total[i] << endl;

    }
}

OK関数を引き出しましたが、まだゴミが出ています。

while(infile>> batch >> amount){
        //infile >> batch;
        //infile >> amount;
        cout << batch << "     " << amount<< endl;
        totalChocolates[batch-1]+=amount;   
        chocolateBatches[batch-1]++;

    }
    for(int i = 0;i<size;i++)
    {
        cout << i+1 << "     "  << chocolateBatches[i] << "     " << totalChocolates[i] << endl;

    }

戻ります

1     64
8     907
18     1133
9     636
3     1134
16     1101
6     313
7     791
7     1130
1     1221
20     332
22     697
6     807
2     36
2     747
16     1219
3     859
18     639
18     312
7     1079
10     1074
5     678
18     59
1     -858993418     -858960818
2     -858993429     -858971910
3     -858993421     -858963346
4     -858993431     -858970692
5     -858993427     -858963901
6     -858993416     -858961011
7     -858993417     -858960812
8     -858993421     -858961874
9     -858993417     -858960079
10     -858993418     -858960161
11     -858993422     -858963562
12     -858993428     -858970812
13     -858993460     -858993460
14     -858993427     -858967859
15     -858993422     -858964267
16     -858993418     -858954549
17     -858993423     -858966453
18     -858993423     -858964725
19     -858993460     -858993460
20     -858993433     -858973375
21     -858993419     -858963644
22     -858993426     -858968664
23     -858993456     -858993060
24     -858993460     -858993460
25     -858993455     -858990222
Press any key to continue . . .
4

1 に答える 1

3

はい、ほとんどです。問題は、配列のサイズを適切に使用していないため、おそらく最後に初期化されていないスペースにぶつかっているだけです。また、関数にサイズを渡してprint、最後から逃げないようにします。

編集:質問のコメントにあるケレクの警告に注意してください。

于 2012-09-17T20:37:18.907 に答える