价值改变自己

时间:2015-09-08 00:49:53

标签: c++

我已经在C ++中实现了下一个代码,但是我没有得到我想要的东西,然后我注意到,由于任何原因,矩阵中的值本身发生了变化(R [0] [0]的值[ 0])。 我在我的系统和Ideone中遇到了同样的问题,即使使用C ++ 14:

#include <stdio.h>

using namespace std;

int main()
{
    int N, K, Mi[9], M[9][17][3], R[9][1001][2], i, j, aux;
    Mi[0]=0;
    for(i=0; i<1001; i++) R[0][i][0]=1, R[0][i][1]=1;

    printf("%d/%d\n",R[0][0][0],R[0][0][1]);
    //R[0][0][0]==1 just like I want

    for(i=1; i<9; i++) R[i][0][0]=0, R[i][0][1]=1;
    for(i=0; i<17; i++) M[i][0][0]=0, M[i][0][1]=1, M[i][0][2]=0;

    printf("%d/%d\n",R[0][0][0],R[0][0][1]);
    //R[0][0][0]==0, why? I don't understand

    while(scanf("%d %d",&N,&K)==2)
    {
        for(i=1; i<=N; i++) scanf("%d",Mi+i);
        for(i=1; i<=N; i++)
        {
            for(j=1; j<=Mi[i]; j++)
            {
                scanf("%d %d %d",&M[i][j][0],&M[i][j][1],&M[i][j][2]);
                M[i][j][0]=M[i][j][1]-M[i][j][0];
            }
        }
    }
    return 0;
}

我已经在我的代码R[0][0][0]=1中使用了它,但它对我来说仍然很奇怪,我不希望通过这样的事情来解决未来的问题。

如果我对代码进行了一些更改(例如,删除下一​​个while循环),则值不会更改。

这是一个错误吗? 我做得不好吗?

1 个答案:

答案 0 :(得分:1)

由于M的维度为[9][17][3],因此循环

for(i=0; i<17; i++) M[i][0][0]=0, M[i][0][1]=1, M[i][0][2]=0;

修改不存在的元素。这是未定义的行为。修改一些其他变量(或数组的元素)是可行的结果。