[英]Linux, C, ncurses: seg fault caused by printw
有什么原因導致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的stacktrace:
#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 ()
您是否忘了調用initscr ()?
最好的選擇可能是在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);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.