Intelwalk
Intelwalk

Reputation: 671

Passing Arrays By Reference

I'm having an issue of getting garbage out of my array after I pass it to a function. Is this the correct way to pass it to a function that will just print it out?

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 I pulled out the function and i'm still getting garbage.

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;

    }

It returns

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 . . .

Upvotes: 2

Views: 179

Answers (1)

slugonamission
slugonamission

Reputation: 9642

Pretty much, yes. The issue is, you are not properly using the size of the array, so you are probably just running into the uninitialized space at the end. Also pass a size into the print function so you don't run off the end.

EDIT: Although do take heed of Kerrek's warning in your question comments.

Upvotes: 3

Related Questions