C分段故障在子功能:我怎么知道要解决什么?什么是分段错误



我一直得到分段错误,但我不确定这意味着什么,也不知道是什么原因导致的(我对编程和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);

相关内容

  • 没有找到相关文章

最新更新