我一直得到分段错误,但我不确定这意味着什么,也不知道是什么原因导致的(我对编程和C很不熟悉)。在这个函数中,由main.c调用,我需要确定二维数组每一行中最小数字的索引。
下面是我的代码:#include "my.h"
void findfirstsmall (int x, int y, int** a)
{
int i;
int j;
int small;
small = y - 1;
printf("x = %3d, y = %3dn", x, y); //trying to debug
printf("f. The first index of the smallest number is: n");
for(i = 0; i < x; i++)
{
for(j = 0; j < y; i++) <---------- needs to be j, for any future readers
{
if(a[i][small] > a[i][j])
small = j;
printf("small = %3dn", small); //trying to debug
}
printf("Row: %4d, Index: %4dn", i, small);
small = y - 1;
printf("n");
}
printf("n");
return;
}
正确打印第一行,但不打印第二行。这是我的数组:
-23 -56 2 99 -12
这是我运行程序时得到的结果:
x = 2, y = 5 f. The first index of the smallest number is: small = 4 small = 0 Segmentation fault
这是c语言,提前感谢您的帮助!
修复typo
:
for(j = 0; j < y; j++)
^^
分段错误意味着您正在访问不属于您的内存。
作为不查看代码的即时猜测-它是一个差1的错误。记住C数组是从零开始的。
我很快就会看你的代码。
printf("f. The first index of the smallest number is: n");
for(i = 0; i < x; i++)
{
for(j = 0; j < y; i++) // my guess is that you increment "i" instead of "j"
{
注意,二维数组和指针数组是有区别的(参见这个问题)。这取决于你在main()
中做什么,这可能是你的问题。例如,下面的代码不能按原样使用该函数,因为它传递了一个指向包含数组的数组的内存指针:
int arr[2][5] = { { 56, 7, 25, 89, 4 },
{ -23, -56, 2, 99, -12 } };
findfirstsmall (2, 5, arr);
然而,这是可以的,因为它传递了一个指针数组,指向arr
的每个子数组的开始:
int arr[2][5] = { { 56, 7, 25, 89, 4 },
{ -23, -56, 2, 99, -12 } };
int *tmp[2];
tmp[0] = &arr[0][0];
tmp[1] = &arr[1][0];
findfirstsmall (2, 5, tmp);