我在学院创建了一个在DevC ++中运行良好的程序,但回到家时它在Code :: Blocks中不起作用,我不知道出了什么问题。我想计算2D整数数组(全0)的行数和列数,然后我发现即使使用1D数组,我使用的方法也是不正确的。你能告诉我什么是错的吗?
#include <stdio.h>
#include <stdlib.h>
#define L 5
#define C 2
#define N 10
int main()
{
int T[L][C],M[N],i=0,j=0,k=0;
for(i=0;i<L;i++) for(j=0;j<C;j++) T[i][j]=0;
for(k=0;k<N;k++) M[k]=0;
i=0;
j=0;
k=0;
while(T[i][0]==0) i++;
while(T[0][j]==0) j++;
while(M[k]==0) k++;
printf("The number of lines is: %d.\nThe number of columns is: %d.\n",i,j);
printf("The number of lines is: %d.\nThe number of columns is: %d.\n",L,C);
printf("The number of lines is: %d.\n",k);
printf("The number of lines is: %d",N);
getch();
return 0;
}
答案 0 :(得分:3)
在本声明中,
while(T[i][0]==0) i++;
i
值将继续递增,但i
的绑定检查在哪里?它可能超出了已定义数组的实际分配维度,并导致Undefined behavior。
同样适用于while(T[0][j]==0) j++;
和while(M[k]==0) k++;
。
答案 1 :(得分:2)
你的条件错了。
while(T[i][0]==0) i++;
while(T[0][j]==0) j++;
while(M[k]==0) k++;
即使分配了记忆,也有可能存在0。在没有索引范围检查或超出范围的异常的旧版本中,即使达到指定的长度,它也可以继续运行。 所以你找到数组长度的方法是错误的。此外,如果没有为数组动态分配内存,并且您知道您的数组将具有固定长度,那么为什么还要检查它的大小。从我看到的,你想要数不。你的数组中的某些值,然后有很多算法可用于搜索。应用其中之一:)