今天想用自加的方式给二维数组赋值,编译没有错误,但是运行的时候出现NTVDM CPU遇到无效指令的错误.(这个我不知道是不是编译还境的问题.)
源代码如下:
main()
{
int a[3][3],i,j,k=0;
for(i=0;i<=3;i++)
{
for(j=0;j<=3;j++)
{
a[j]=k;
k++;
printf(“%d “,a[ i ][ j ]);
}
printf(“\n”);
}
}
我想得到的结果是
0 1 2 3
4 5 6 7
8 9 10 11
12 13 14 15
运行后的结果是
0 1 2 3
4 5 6 7
8 9 10 12
12 13 14 15
这个我不太明白为什么是i=2,j=3和i=3,j=1是出现问题.
我之后又试过五行五列,七行七列,十二行十二列等等也没出现这个问题.
教课书上的赋值大多都是直接赋值的例子.要不就是与i,j有关的赋值方法.
请问这是自加产生的问题,还是数组赋值产生的问题.
还有就是NTVDM CPU遇到无效指令的错误,能否可以给出解释,最好是以汇编的方式给出.
这个学期有汇编语言的课,希望回复中能得到一点启发.
>> 本文固定链接: http://www.vcgood.com/archives/2849
NTVDM CPU遇到无效指令的错误,这个错误在dos程序运行windows下的时候经常出现!没必要研究很清楚!毕竟不同系统上编译的程序,兼容性问题肯定会出现的!
倒是你程序中的问题很大!
int a[3][3],i,j,k=0; // 3*3的数组
for(i=0;i<=3;i++)< ?:NAMESPACE PREFIX = O />
{
我的确是打错了.应该是
a[i][j]=k;
但是你说的数组循环的问题我很怀疑你的看法.数组下标是从零开始的这有什么问题.如果我这种方法有错.怎么会出4×4的结果.
而且这种错误,与我所说的问题没有什么必然的因果关系.
我想问的是为什么———————-会出现不正常的赋值.是什么因素因起的,是编程的问题还是编译的问题,还是其它什么
main()
{
int a[4][4],i,j,k=0; //这里应该是a[4][4],因为你下面每个循环语句都是4次的!
for(i=0;i<=3;i++)
{
for(j=0;j<=3;j++)
{
a[i][j]=k;
k++;
printf(“%d “,a[ i ][ j ]);
}
printf(“\n”);
}
}
是的,是我错了。
我没仔细看代码,谢谢你的指正。
我对我的疏忽感到谦意。
再一次感谢你的指点。