【发布时间】:2012-03-24 02:42:14
【问题描述】:
printw() 有什么原因会导致分段错误吗?
没有它的代码很好;被它打破了。它似乎没有做任何深奥的事情,所以我什至不知道如何开始理解这里出了什么问题。
提前感谢您的任何建议!
#include <ncurses.h>
...
initscr();
noecho();
cbreak();
...
void draw_court()
{
move(TOP_ROW-1, LEFT_COL+4);
printw("LIVES REMAINING: 3");
int i;
for (i = 0; i < RIGHT_COL; i++)
mvaddch(TOP_ROW, LEFT_COL+i, H_LINE);
for (i = 1; i < BOT_ROW-TOP_ROW; i++)
mvaddch(TOP_ROW+i, LEFT_COL, V_LINE);
for (i = 0; i < RIGHT_COL; i++)
mvaddch(BOT_ROW, LEFT_COL+i, H_LINE);
}
ETA:来自 gdb 的堆栈跟踪:
#0 0xb778a139 in _nc_printf_string () from /lib/libncurses.so.5
#1 0xb7785e04 in vwprintw () from /lib/libncurses.so.5
#2 0xb7785f63 in printw () from /lib/libncruses.so.5
#3 0x08048f23 in draw_court ()
#4 0x080489f4 in set_up ()
#5 0x0804890a in main ()
【问题讨论】:
-
TOP_ROW-1是正确的计算,还是应该是TOP_ROW+1?我在想越界错误。 -
TOP_ROW实际上定义为 5 - 抱歉,我知道这有点令人困惑。 -
我会尝试在 valgrind 下运行你的程序来检查内存错误。
-
应该
i < RIGHT_COL是i < RIGHT_COL - LEFT_COL吗?或者你定义RIGHT_COL是绝对的,而BOT_ROW是相对的? -
你能发布完整的代码吗?因为有时,打印会隐藏其他地方的问题
标签: c linux segmentation-fault ncurses