del_panel ncurses 库的函数导致段错误
del_panel function of ncurses library causes segfault
我有一个代码在一个函数中使用 new_panel 分配面板并尝试使用 del_panel[=20 解除分配它们=] 在另一个函数中。代码示例如下
void medical_cards(int regid){ //work with patient's medical cards
/*...*/
PANEL *pmedcards[cards];
WINDOW *wmedcards[cards];
bind_windows(pmedcards, wmedcards, cards);
//this function allocates panels
/*...*/
update_panels();
doupdate();
/*...*/
i = 0;
while (i < cards)
del_panel(pmedcards[i++]);
/*here I get segfault with backtrace pointing
to wtouchln function of the ncurses library*/
i = 0;
while (i < cards)
delwin(wmedcards[i++]);
return;
}
void bind_windows(PANEL **pmedcards, WINDOW **wmedcards, int cards){
int height = 15, width = 40, ypos = LINES - 20, xpos = COLS - 45;
int i = 0;
while (i < cards) {
wmedcards[i] = newwin(height, width, ypos, xpos + i);
box(wmedcards[i++], 0, 0);
}
i = 0;
while (i < cards)
pmedcards[i] = new_panel(wmedcards[i++]);
}
问题是我在尝试解除分配面板时出现段错误,调试器
指出 wtouchln 函数是一个麻烦源。以前好像没有人遇到过这样的问题,man pages对del_panel函数的描述也很少,希望大家帮忙。我期望的是 del_panel 将完成其释放资源的工作,并且 return 正常,而不会导致程序崩溃。
pmedcards[i] = new_panel(wmedcards[i++]);
第一个 i 或 i++ 是什么?我是UB。
问题与 ncurses 库无关,而是分配新面板时出现的愚蠢错误导致未定义的行为,正如 Michal Marszalek 指出的那样。问题已解决
我有一个代码在一个函数中使用 new_panel 分配面板并尝试使用 del_panel[=20 解除分配它们=] 在另一个函数中。代码示例如下
void medical_cards(int regid){ //work with patient's medical cards
/*...*/
PANEL *pmedcards[cards];
WINDOW *wmedcards[cards];
bind_windows(pmedcards, wmedcards, cards);
//this function allocates panels
/*...*/
update_panels();
doupdate();
/*...*/
i = 0;
while (i < cards)
del_panel(pmedcards[i++]);
/*here I get segfault with backtrace pointing
to wtouchln function of the ncurses library*/
i = 0;
while (i < cards)
delwin(wmedcards[i++]);
return;
}
void bind_windows(PANEL **pmedcards, WINDOW **wmedcards, int cards){
int height = 15, width = 40, ypos = LINES - 20, xpos = COLS - 45;
int i = 0;
while (i < cards) {
wmedcards[i] = newwin(height, width, ypos, xpos + i);
box(wmedcards[i++], 0, 0);
}
i = 0;
while (i < cards)
pmedcards[i] = new_panel(wmedcards[i++]);
}
问题是我在尝试解除分配面板时出现段错误,调试器 指出 wtouchln 函数是一个麻烦源。以前好像没有人遇到过这样的问题,man pages对del_panel函数的描述也很少,希望大家帮忙。我期望的是 del_panel 将完成其释放资源的工作,并且 return 正常,而不会导致程序崩溃。
pmedcards[i] = new_panel(wmedcards[i++]);
第一个 i 或 i++ 是什么?我是UB。
问题与 ncurses 库无关,而是分配新面板时出现的愚蠢错误导致未定义的行为,正如 Michal Marszalek 指出的那样。问题已解决