我的代码输出异常

时间:2015-12-03 18:14:09

标签: c++

我尝试用c ++读取一个数组,填充0到5之间的值。由于一个不重要的原因,我需要计算数字1,数字2,数字3,数字4和数字5的数量站在'iii * DAYS'位置,所以当iii = 0且DAYS为5时,我需要知道有多少数字1,数字2,数字3,数字4和数字5位于第0,第4,第9,第14位。我发布的代码做得很好,但有时会给出一个非常大的非逻辑值,-36589245或99653256,有人可以告诉我为什么会发生这种情况(确实会发生+ - 一次很多次)

DAYS = 28
NURSES = 33
SHIFTS =5

int calculate_penalty_coverage_offspring(int offspring[NURSES*DAYS])
{
    int temporary[DAYS];
    int count[DAYS][SHIFTS];
    penalty_score_offspring_coverage =0;

        for (int ii = 0; ii<DAYS; ii++) 
        {
            int een  = 0;
            int twee = 0;
            int drie = 0;
            int vier = 0;
            int vijf = 0;
            for (int iii = 0; iii<NURSES; iii++)
            {
                temporary[iii] = offspring[(ii+(iii*DAYS))];
            }
            for(int a = 0 ; a<DAYS ; a++)
            {

                if(temporary[a]== 1)
                {
                    een++;
                    count[ii][0] = een;
                }
                else if(temporary[a] == 2)
                {
                    twee++;
                    count[ii][1] = twee;
                }
                else if(temporary[a]== 3)
                {
                    drie++;
                    count[ii][2] = drie;
                }
                else if(temporary[a]== 4)
                {
                    vier++;
                    count[ii][3] = vier;
                }
                else if(temporary[a] == 5)
                {
                    vijf++;
                    count[ii][4] = vijf;
                }   
            }
        }

        for(int ii = 0; ii<DAYS ; ii++)
        {
            for (int iii =0 ; iii<SHIFTS ; iii++)
            {
                cout << count[ii][iii] << '\t';
            }
            cout << '\n';
        }

这是我所谈到的例外输出,你可以看到,-31427696的输出中有一个onlogical值......我不明白为什么这个函数运行良好,除了这个时间。

1   2   2   4   4   
    5   2   2   9   5   
    9   6   3   5   2   
    8   3   4   3   8   
    9   3   3   4   6   
    5   5   6   8   1   
    6   8   2   2   5   
    3   5   8   -31427696   7   
    5   5   2   5   8   
    5   7   8   2   3   
    2   7   1   2   10  
    5   6   3   5   5   
    4   4   4   6   7   
    7   4   6   4   6   
    6   5   6   4   3   
    5   3   7   4   6   
    5   5   6   1   7   
    5   5   1   6   2   
    4   6   6   4   5   
    3   3   4   5   9   
    6   6   5   4   4   
    5   5   4   4   5   
    8   4   4   5   3   
    5   5   4   7   5   
    4   8   6   3   3   
    9   1   5   7   3   
    3   7   5   2   5   
    2   6   5   7   5

1 个答案:

答案 0 :(得分:5)

首先你说

int temporary[DAYS];

哪里

DAYS = 28

然后你做:

for (int iii = 0; iii<NURSES; iii++)
{
    temporary[iii] = offspring[(ii+(iii*DAYS))];
}

其中

NURSES = 33

您正尝试访问temporary中超出范围的索引。

编辑:在评论中讨论后,

您还没有初始化数组,特别是count

int count[DAYS][SHIFTS];

然后有条件稍后填写(部分):

if(temporary[a]== 1)
{
   een++;
   count[ii][0] = een;
}
// ...

之后访问 指定的索引的count将导致您看到的垃圾编号。您可能应该将矩阵默认为全部为零,如下所示:

int count[DAYS][SHIFTS] = {0};