Segmentation Error: 11 in C Code

Why am I getting a segmentation error with this code?

/* 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 }; 

solver.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 } 

exit:

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

Segmentation Error: 11

+7
source share
3 answers

Arrays are indexed from 0, so loops should be for(i = 0; i<9; i++) , not for(i = 1; i<10; i++)

In your case, you are likely to override a portion of the stack, but in general, exiting boundaries results in undefined behavior.

+9
source

some_type array[9]; defines array as an array of 9 elements, with indices ranging from 0 to 8 inclusive. You cannot use array[9] .

+1
source

board[9][9] will contain elements with indices in the range 0..8, not 1..9. When you assigned the board [9] [independently], you actually overwritten the memory that did not belong to you, and this caused the program to explode when return 0 transferred control back to the C runtime, and it began to lay out its structures to complete a stop.

0
source

All Articles