首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >分割错误:C代码中的11

分割错误:C代码中的11
EN

Stack Overflow用户
提问于 2012-05-07 16:59:23
回答 3查看 100.9K关注 0票数 9

为什么我在这段代码中有一个分段错误?

代码语言:javascript
复制
 /* 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:

代码语言:javascript
复制
  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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-05-07 17:02:18

数组是从0索引的,因此循环应该是for(i = 0; i<9; i++)而不是for(i = 1; i<10; i++)

在您的例子中,您可能会覆盖堆栈的一部分,但是通常,超出边界会导致未定义的行为。

票数 12
EN

Stack Overflow用户

发布于 2012-05-07 17:02:43

some_type array[9];array定义为一个由9个元素组成的数组,下标从0到8包含在内。你不能使用array[9]

票数 2
EN

Stack Overflow用户

发布于 2012-05-07 17:03:12

board[9][9]将包含索引在0.8,而不是1.9范围内的元素。当您分配给board[9][whatever]时,您实际上重写了不属于您的内存,这恰好导致了当return 0将控制权交还给C运行时并开始遍历其结构以执行关闭时,程序会爆炸。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10486001

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档