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 ()
答案 0 :(得分:4)
您是否忘记致电initscr()?
答案 1 :(得分:2)
您最好的选择可能是在gdb
或其他调试器下运行代码,这样您就可以确切地看到它正在做什么。
如果这不是一个选项,请检查您的索引是否有一个错误,然后尝试注释掉(整个)程序的某些部分,直到您到达仍然崩溃的最小片段为止;如果你想帮助调试那么发帖。
另外,因为我无法自助,所以你只需要2个循环来画一个盒子。 : - )
void draw_box()
{
move(TOP_ROW-1, LEFT_COL+4);
printw("LIVES REMAINING: 3");
int i;
for (i = 0; i < RIGHT_COL; i++) { // should the limit be RIGHT_COL - LEFT_COL ?
mvaddch(TOP_ROW, LEFT_COL+i, H_LINE);
mvaddch(BOT_ROW, LEFT_COL+i, H_LINE);
}
for (i = 1; i < BOT_ROW-TOP_ROW; i++) {
mvaddch(TOP_ROW+i, LEFT_COL, V_LINE);
mvaddch(TOP_ROW+i, RIGHT_COL, V_LINE);
}
}