代码如下:
#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
那一行:前面加一个取地址符
&
,变成:原因:
scanf函数的第二个参数应该是个地址,具体到你的问题,应该是数组中某个元素的地址。但是你没有加取地址符,而是直接把元素的值当地址用了。而你的数组也没有初始化,元素的值是随机的,导致你访问了不该访问的内存地址。所以报出了:segmentfault
就是说:正常情况下,你只能在程序中访问已经分配的内存,当你访问未分配的地址时,就有可能抛出段错误。