我编写了一些程序来查看 7*7 的表格,由...... 这是工作,但由于某种原因,程序在程序结束时崩溃了。 我的编译器是 GCC,我使用的是 C99。
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <math.h>
#include <string.h>
#define LENGTH 7
void printsTable(int arr[LENGTH][],int len);
int main()
{
int table[LENGTH][LENGTH] = {0};
int i = 0, j = 0;
for(j = 1; j <= LENGTH; j++)
{
for(i = 1; i <= LENGTH; i++)
{
table[j][i] = pow(j,i);
}
}
printsTable(table,LENGTH);
return 0;
}
void printsTable(int arr[][LENGTH],int len)
{
int i = 0, j = 0;
for(i = 1; i <= LENGTH; i++)
{
for(j = 1; j <= LENGTH; j++)
{
printf("%d\t", arr[i][j]);
}
printf("\n");
}
}
最佳答案
你fors
是不正确的。
索引从 0
开始不是来自1
,在 c数组,还有矩阵。
使用<=
您正在寻址越界,属于 UB ,因为 i
的最后一个循环for 将指向table[j][7]
,以及 j
的最后一个循环将指向table[7][i]
。所有这些地址都在表分配空间之外,从table[0][0]
开始。至table [6][6]
.
您应该按如下方式更正您的代码
for(j = 0; j < LENGTH; j++)
{
for(i = 0; i < LENGTH; i++)
{
table[j][i] = pow(j,i);
}
}
或者,但不推荐,
for(j = 1; j <= LENGTH; j++)
{
for(i = 1; i <= LENGTH; i++)
{
table[j-1][i-1] = pow(j,i);
}
}
printsTable
也是如此函数循环。
关于c - 循环数组会导致我的程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35134344/