【发布时间】:2012-05-16 04:36:53
【问题描述】:
为什么这段代码会出现分段错误?
/* solver.h header file */
10 struct options{
11 unsigned int one:1, two:1, three:1, four:1, five:1, six:1, seven:1, eight:1, nine:1;
12 };
13
14
15 /* structure to describe a cell */
16 struct cell{
17 short value;
18 struct options open_options;
19 };
求解器.c:
5 #include <stdio.h>
6 #include "solver.h"
7
8
9
10
11
12 int main(){
13 struct cell board [9][9];
14 int i=0,j=0;
15
16
17 for(i = 1; i<10; i++)
18 for(j = 1; j<10; j++)
19 (board[i][j]).value = j;
20
21 for(i = 1; i<10; i++){
22 for(j = 1; j<10; j++)
23 printf(" %d",(board[i][j]).value);
24 printf("\n");
25 }
26 return 0;
27 }
输出:
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9分段错误:11
【问题讨论】:
-
您可以使用
gdb开始自己调试代码 -
C 数组
x中的第一个元素是x[0] -
确实
for(i=0; i < 9; i++){}BTW:如果您打算实现数独求解器:位掩码会更容易,因为您可以一次扫描所有数字。 -
@wildplasser 是的,我现在看到了。我对C还是很陌生;我在想一个位域可以被类似地屏蔽。不过谢谢!
-
每个单元格的位掩码不如每个行/列/框的位掩码有用。并且不要忘记有时你必须回溯(在你摘下低垂的果实之后)
标签: c segmentation-fault