我正在写一个带有ncurses的小型控制台游戏(作为学习任务),并且我已经有一些小问题了(这是我第一次使用列表在C),但从来没有一个真正的showstopper。然而,作为“未来规定”,我想实现一个基本的调试日志文件。而这正是事情开始表现奇怪的地方。fprintf由于突然地址更改导致段错误
日志文件是全局声明的,fopen()(使用w +模式)和ferror()不显示任何错误证据。相反,一切似乎完美地工作,日志文件被创建,信息被写入它。然而,在我为各种函数添加了一些调试输出之后,游戏只是段错误。作为consquence,我已经注释掉几乎所有调试输出到文件,现在这个简单的代码行崩溃了整场比赛:
fprintf(debuglog, "loop_game()\n\tTime's over! Returning 0\n");
我用gdb运行程序,并BT全输出如下:
#0 0x00007ffff7886f24 in fwrite() from /lib/libc.so.6
No symbol table info available.
#1 0x000000000040224f in loop_game (pl=0x62d800, list_win=0x62f930,
timer=0x632620, list_ob=0x632640) at game.c:207
elapsed = 60
#2 0x0000000000402d53 in main() at main.c:62
pl = 0x62d800
list_win = 0x62f930
timer = 0x632620