为什么我在这段代码中有一个分段错误?
/* 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
发布于 2012-05-07 17:02:18
数组是从0索引的,因此循环应该是for(i = 0; i<9; i++)而不是for(i = 1; i<10; i++)。
在您的例子中,您可能会覆盖堆栈的一部分,但是通常,超出边界会导致未定义的行为。
发布于 2012-05-07 17:02:43
some_type array[9];将array定义为一个由9个元素组成的数组,下标从0到8包含在内。你不能使用array[9]。
发布于 2012-05-07 17:03:12
board[9][9]将包含索引在0.8,而不是1.9范围内的元素。当您分配给board[9][whatever]时,您实际上重写了不属于您的内存,这恰好导致了当return 0将控制权交还给C运行时并开始遍历其结构以执行关闭时,程序会爆炸。
https://stackoverflow.com/questions/10486001
复制相似问题