gpt4 book ai didi

c - 任何文件访问 C/SDL2 上的段错误

转载 作者:行者123 更新时间:2023-11-30 19:36:21 26 4
gpt4 key购买 nike

当我运行这个函数时,我无法弄清楚为什么这个程序会出现段错误: https://github.com/biohazard-hack/high-hand/blob/master/events.c#L73

我有这个程序的另一个版本,它是一个草稿,在这里: http://pastebin.com/TgiqM9tX

我知道我在当前版本中读取文件的方式是错误的,但是当我使用 fscanf() 或任何东西来访问文件时,它会出现段错误。

它将以文本或二进制读取模式打开文件,但是当我对其进行任何类型的读取时,它就会崩溃。

(gdb)运行启动程序:/home/tracer/code/rcg/high-hand/high-hand[启用使用libthread_db进行线程调试]使用主机 libthread_db 库“/lib/x86_64-linux-gnu/libthread_db.so.1”。信息:手牌不为空

这是使用 gdb 中的 fscanf() 的输出:

Program received signal SIGSEGV, Segmentation fault.
0x00007ffff7537686 in _IO_vfscanf_internal (s=s@entry=0x9ee820,
format=<optimized out>, argptr=argptr@entry=0x7fffffffdc78,
errp=errp@entry=0x0) at vfscanf.c:843
843 vfscanf.c: No such file or directory.

最佳答案

下次请至少启动调试器;如果不亲自解决自己的错误,你就不会走得太远。

问题不是由有问题的代码引起的。在 main.h 中有 extern char* Curl[5];,但在 main.c 中它被初始化为:

char*           Curl[5] ={  "img/cards/rj.png",
"img/cards/rj.png",
"img/cards/rj.png",
"img/cards/rj.png",
"img/cards/rj.png"
};

字符串常量放置在常量内存中,不允许修改。当您尝试更改此字符串时,您会遇到段错误,因为您正在尝试写入只读页面。

可能最简单的解决方案是将类型更改为例如两个地方的 char Curl[5][32] (确保大小足以容纳文件名)。

顺便说一句,过度使用全局变量会导致问题发生,而 foo() 并不是 C 中定义不带参数的函数的方式(但 C++ 中却如此)不过)。

关于c - 任何文件访问 C/SDL2 上的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41008989/

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