打印结构

时间:2016-05-15 15:17:54

标签: c pointers segmentation-fault

我想在终端上打印数独游戏,我得到了这个结构:

javax.ws.rs.Application

我在主要功能中得到了这个:

#define SUDOKU_SIZE 9
typedef struct {
  int grid[SUDOKU_SIZE][SUDOKU_SIZE];
} sudoku_t;

编译期间没有问题,但在执行过程中出现“Segmentation Fault(core dumped)”错误。

谢谢

[编辑] 好的,我使用了malloc,并在我的函数中免费使用, 但我仍然收到一个错误: *`./ingis'出错:free():下一个大小无效(快):0x0000000001e8d010 * 中止(核心倾销)

这是更新后的代码:

int main(int argc, char const *argv[]){
   sudoku_t *s;
   s->grid[0][0]=6;//manualy setting the value of the sudoku
   ...
   s->grid[8][8]=7;
   int k, l;
   printf("\n");
   for(k=0;k<SUDOKU_SIZE;k++){
       for(l=0;l<SUDOKU_SIZE;l++){
           int a=s->grid[k][l];
           printf("%d", a);
       }
       printf("\n");
   }
   printf("\n");
   return 0;
}

3 个答案:

答案 0 :(得分:1)

在此定义之后

sudoku_t *s;

s无处可指。

所以像这里一样解除引用

s->grid[0][0]= ...

尝试读取无效内存,并使用此方法调用未定义的行为。从现在开始,任何事情都可能发生。

要解决此问题,只需定义一个soduko_t,而不仅仅是指向它的指针:

soduko_t s;

并用->替换所有. - 运算符。

或者你可以动态地分配内存

 soduko_t * ps = malloc(sizeof *ps);
 if (NULL == ps)
 {
   perror("malloc() failed");
   exit(EXIT_FAILURE);
 }

使用s完成代码后,释放内存:

free(ps);

答案 1 :(得分:1)

您需要为结构分配内存。

  <a href="#">
<div class="facebook button-big">
<i class="fa fa-facebook"></i>
</div></a>
<a href="#"><div class="youtube button-big dist">
 <i class="fa fa-youtube"></i>
</div></a>

<a href="#"><div class="instagram button-big dist">
 <i class="fa fa-instagram"></i>
</div></a>

答案 2 :(得分:1)

而不是像sudoku_t *s;这样的指针,只需将其声明为普通变量sudoku_t s;

现在只需使用.运算符代替->运算符,如

s.grid[0][0] = 6;
...
s.grid[8][8] = 9;
...
int a = s.grid[k][l];