gpt4 book ai didi

c - 打印结构

转载 作者:行者123 更新时间:2023-11-30 18:37:24 25 4
gpt4 key购买 nike

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

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

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

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

编译时没有问题,但执行时出现“Segmentation Failure (core dumped)”错误。

谢谢

[编辑]好的,我使用了 malloc,并在我的函数中使用了 free,但我仍然收到错误:* `./ingis' 中的错误:free(): 下一个尺寸无效(快速):0x0000000001e8d010 *中止(核心转储)

这是更新后的代码:

int main(int argc, char const *argv[]){
sudoku_t *s=(sudoku_t*)malloc(sizeof s);
if(NULL==s){
perror("malloc() failed");
exit(EXIT_FAILURE);
}
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");
free(s);
return EXIT_SUCCESS;
}

最佳答案

在此处定义之后

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);

关于c - 打印结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37240001/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com