我已经在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循环),则值不会更改。
这是一个错误吗? 我做得不好吗?
答案 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;
修改不存在的元素。这是未定义的行为。修改一些其他变量(或数组的元素)是可行的结果。