首页 > C语言运行时segmentation fault

C语言运行时segmentation fault

代码如下:

#include<stdio.h>

int array[3][3],
    line_counter,
    column_counter;


void scan_array(int array[][3], int line, int column){
        for(line_counter=0; line_counter<line; line_counter++){
                for(column_counter=0; column_counter<column; column_counter++){
                        scanf("%d", array[line_counter][column_counter]);
                }
        }
}

int main(){
        scan_array(array, 3, 3);
        return 0;
}

执行结果

$ ./2d-array.run
1 2 3 4 5 6 7 8 9
[1]    39648 segmentation fault  ./2d-array.run

请问是什么导致了这个段错误?应该如何解决?
请务必解释清楚,我是初学者)


首先,我觉得应该这样修改:

scanf那一行:

array[line_counter][column_counter]

前面加一个取地址符&,变成:

&array[line_counter][column_counter]

原因:

scanf函数的第二个参数应该是个地址,具体到你的问题,应该是数组中某个元素的地址。但是你没有加取地址符,而是直接把元素的值当地址用了。而你的数组也没有初始化,元素的值是随机的,导致你访问了不该访问的内存地址。所以报出了:

就是说:正常情况下,你只能在程序中访问已经分配的内存,当你访问未分配的地址时,就有可能抛出段错误。

【热门文章】
【热门文章】