gpt4 book ai didi

c - 段错误可能是由于指针问题

转载 作者:行者123 更新时间:2023-11-30 15:51:22 25 4
gpt4 key购买 nike

我对 C 有点陌生,我正在尝试编写一个简单的蛇重制版。可以在github上查看源码:https://github.com/blackwolf12333/Snake

构建时,输出中没有警告或错误。但是,当我运行可执行文件并按 Enter 键时,它会退出并显示“段错误(核心转储)”。我还不是指针方面的专家,我来自java,在谷歌搜索时我发现这可能是指针的问题。

我不知道哪里出了问题,因为据我所知,我做的事情是正确的。问题是当我尝试循环蛇的 body_part 时。

    void print_snake() {
int i;
body_part *next = main_snake.head.next;

move(main_snake.head.pos.x, main_snake.head.pos.y);
addch('$');
for(i = 0; i < main_snake.length; i++) { //TODO: segfaults when 'main_snake.length'(should be this) instead of 'main_snake.length - 1'
printf("1 part");
print_body_part(next);
next = next->next;
}
}

这是来自存储库中的snake.c 文件。

希望大家能帮帮我问候 blackwolf12333

最佳答案

在深入研究代码之前,很明显,当 next 变为 null 且 next->next 时会导致段错误。

在循环中,您从 head(main_snake.head.next) 旁边的节点开始。因此,在 4 个对象的列表中,您仅处理 3 个对象。在这种情况下,迭代应该是 3 次而不是 4 次,因为 main_snake.length 也会计算头部,如函数 initialize_snake 中所示。这就是您遇到段错误的原因。

关于c - 段错误可能是由于指针问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15180240/

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