我不断遇到分段错误,但我不确定这意味着什么或如何判断是什么导致它(我对编程和C非常新)。在main.c调用的这个函数中,我需要确定二维数组的eacg行中最小数字的索引。
这是我的代码:
#include "my.h"
void findfirstsmall (int x, int y, int** a)
{
int i;
int j;
int small;
small = y - 1;
printf("x = %3d, y = %3d\n", 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 = %3d\n", small); //trying to debug
}
printf("Row: %4d, Index: %4d\n", i, small);
small = y - 1;
printf("\n");
}
printf("\n");
return;
}
它可以正确打印第一行,但不能打印第二行。 这是我的阵列:
56 7 25 89 4
-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.感谢您的帮助!
答案 0 :(得分:5)
修复typo
:
for(j = 0; j < y; j++)
^^
答案 1 :(得分:3)
分段错误意味着您正在访问您不拥有的内存。
在没有查看代码的情况下即时猜测 - 这是一个错误的错误。记住C数组是基于零的。
我会尽快查看您的代码。
答案 2 :(得分:3)
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"
{
答案 3 :(得分:0)
请注意,二维数组和指针数组之间存在差异(请参阅this question)。根据您在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);