程序崩溃与未定义的原因?

时间:2015-05-15 17:31:12

标签: c turbo-c

这是我的简单程序。我跑了很多次。有时它会弹出警告并打破Turbo C.为什么?我使用的是32位Windows 7。

#include <stdio.h>
#include <conio.h>

void main(){
int arr[10][10];
int i,j;
clrscr();
    for(i=1;i<11;i++){
        for(j=1;j<11;j++){
        arr[i][j]=i*j;
        printf("%d\t",arr[i][j]);
        }
        printf("\n");
    }
}

2 个答案:

答案 0 :(得分:1)

这非常简单,原因是c中的数组从0索引到N - 1

所以而不是

for (i = 1 ; i < 11 ; ++i)

必须是

for (i = 0 ; i < 10 ; ++i)

因为您的案例中N10,当然j也相同。

正如您所看到的那样,它不是未定义的原因,它肯定是未定义的行为,但原因是您的代码中存在错误,因此始终首先责怪您的代码,它具有最高的如果你证明你的代码有效并且我的意思是一种数学证明的证明,那么你可以责怪编译器或任何你喜欢的人。

答案 1 :(得分:1)

在这一行:

arr[i][j]=i*j;

ij值的范围是1到10.但是,ar[10][10]实际上超出了数组范围。

由于C遵循从0开始的索引,因此请更改:

for(i=1;i<11;i++){
    for(j=1;j<11;j++){

到此:

for(i=0;i<10;i++){
    for(j=0;j<10;j++){