我有一个代码,该代码将面板中的一个函数分配给 new_panel ,并尝试用 del_panel 在另一个函数中对其进行处理。代码样本在下面
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++]);
}
问题在于我在试图进行面板,调试器时会得到segfault指向 wtouchln 功能是麻烦的来源。似乎以前没有人遇到过这样的问题,而人页面的描述稀缺了 del_panel 函数,任何帮助都将不胜感激。我期望的是,del_panel将在释放资源并正常返回的情况下完成其工作,而不会导致程序崩溃。
pmedcards[i] = new_panel(wmedcards[i++]);
第一个我或I 是什么?这是ub。
这个问题与 ncurses 库无关,而不是分配导致不确定行为的新面板的愚蠢错误,正如指出的Michal Marszalek所指出的那样。问题解决了