我正在尝试对二维数组进行一些检查。 问题是我不知道如何:
这是我迄今为止所做的:
int main() {
int m[4][4] = {
{ 1, 2, 3, 4 },
{ 1, 2, 3, 4 },
{ 1, 2, 3, 4 },
{ 1, 2, 3, 4 } };
to_string((int **) m, 4);
return 0;
}
/*prints the matrix*/
void to_string(int **p, int size) {
int i, j = 0;
for (; i < size; i++) {
j = 0;
for (; j < size; j++) {
printf("%d\t", p[i][j]);
}
printf("\n");
}
}
但是我收到了错误:
Segmentation fault (core dumped)
结果应如下所示:
Please enter the size of the matrix:
"3"
Enter 9 values:
"1,2,3,4,5,6,7,8,9"
1 2 3
4 5 6
7 8 9
所有值都不同!
答案 0 :(得分:0)
您得到段错误,因为您没有初始化i
,并且使用未初始化的变量会调用未定义的行为。将循环更改为for(i=0;i<size; i++){
我的猜测是,i
被“初始化”为某个较大的负值(小于size
),因此它进入循环并快速溢出p
的边界。如果i
碰巧被初始化为某个大的正值,那么循环根本就不会执行,我不会期望会出现段错误,但是你也不会打印出来。这就是为什么行为被定义为 undefined ,任何事情都可能发生。
只是我的意见,但我更喜欢在可能的情况下在循环中初始化for
循环条件变量。更容易看到那里的初始值,而不是在之前的代码中寻找它的价值是什么。
/*prints the matrix*/
void to_string(int **p, int size){
int i, j;
for(i=0; i<size; i++){
for(j=0; j<size; j++){
printf("%d\t", p[i][j]);
}
printf("\n");
}
}