打印阵列时出现分段错误

时间:2015-10-18 22:54:06

标签: c arrays pointers segmentation-fault

当我尝试将数组传递给函数并打印它的值时,出现Segmentation fault错误。我是C编程的新手,并试图解决这个问题很长一段时间。任何帮助将不胜感激。如果可能的话,请用示例代码向我展示解决方案。

#include<stdio.h>
#include<stdlib.h>

void myfun(int **arr);

int main(int args, char** argv)
{            
    int arr[3][3] = {{3, 8, 6}, {2, 3, 2}, {4, 1, 2}};  
    myfun((int **) arr[3]);  
    return 0;
}

void myfun(int **arr) 
{
   int i;   
   for(i=0; i<3; i++) 
   {      
      printf("arr[1][i]:%d\n",arr[1][i]);//Gives Segmentation fault
   }   
}

2 个答案:

答案 0 :(得分:1)

您不能将二维数组作为双指针传递。对于多维数组,函数需要知道除最后一个之外的所有维度。

所以定义myfunc就像这样:

void myfun(int arr[3][3]);

并称之为:

myfun(arr);

答案 1 :(得分:1)

除了函数参数问题,您还可以在函数中交换数组索引。即:

#include<stdio.h>
#include<stdlib.h>

void myfun (int arr[][3]);

int main (void)
{            
    int arr[3][3] = {{3, 8, 6}, {2, 3, 2}, {4, 1, 2}};  
    myfun (arr); 

    return 0;
}

void myfun (int arr[][3]) 
{
    int i;   

    for(i=0; i<3; i++) 
    {      
        printf (" arr[i][1]:%d\n", arr[i][1]); // OK now
    }   
} //result  show 8, 3, 1

<强>输出

$ ./bin/arr_pass_2d
 arr[i][1]:8
 arr[i][1]:3
 arr[i][1]:1

注意: arr[i][1]不是arr[1][i]

此外,如果您在功能中更新printf来电,则还可以包含行值。 e.g:

    printf (" arr[%d][1]:%d\n", i, arr[i][1]);

<强>输出

$ ./bin/arr_pass_2d
 arr[0][1]:8
 arr[1][1]:3
 arr[2][1]:1