NCurses 在 wgetnstr 上出现段错误,除非先按 Enter 键
NCurses segfault on wgetnstr unless enter pressed first
我在文本输入上使用NCurses编写的应用程序中遇到了奇怪的崩溃(SIGSEGV)。每当我尝试输入文本时,段错误都会持续发生 - 除非 - 我先发送输入,此时一切都按预期工作。在这里有点不知所措,希望有人可能对如何解决它或至少有什么问题有所了解。
当前使用 ncurses 5.9。(来自 Debian Wheezy apt 存储库,对应于在 Debian 源代码仓库中提交 983732ea2cf3ed288555ddfa4090ca7825901c40 在 http://anonscm.debian.org/cgit/collab-maint/ncurses.git/tree/?h=wheezy&id=983732ea2cf3ed288555ddfa4090ca7825901c40)
我可以根据需要发布代码的其他部分(包括整个控制台类和主函数)。
法典:
void Console::readinput() {
char* input;
if (!(input = (char*)calloc(1, 1024))) {
exit(212);
}
int r = wgetnstr(winp, input, 1024);
updatewinp();
if (r == ERR) readout();
else if (r == KEY_RESIZE) redrawall();
else if (input == 0) return;
else if (strlen(input) == 0) redrawall();
else if (strcmp(input, "exit") == 0) running = false;
else sendmsg(input);
free(input);
}
回溯:
#0 0x00007ffff79a61cc in waddch_literal (ch=<optimized out>, win=0x7bb080) at /build/buildd-ncurses_5.9-10-amd64-5ex5DJ/ncurses-5.9/ncurses/base/lib_addch.c:384
#1 waddch_nosync (ch=<optimized out>, win=0x7bb080) at /build/buildd-ncurses_5.9-10-amd64-5ex5DJ/ncurses-5.9/ncurses/base/lib_addch.c:434
#2 waddch (win=win@entry=0x7bb080, ch=<optimized out>) at /build/buildd-ncurses_5.9-10-amd64-5ex5DJ/ncurses-5.9/ncurses/base/lib_addch.c:539
#3 0x00007ffff79ab261 in wgetnstr (win=0x7bb080, str=0x864cc1 "", maxlen=1024) at /build/buildd-ncurses_5.9-10-amd64-5ex5DJ/ncurses-5.9/ncurses/base/lib_getstr.c:151
#4 0x000000000049f8b8 in Console::readinput() () at /home/admin/entropy/src/server/Console/Console.cpp:147
#5 0x00000000004ebd22 in main () at /home/admin/entropy/src/server/Entropy/main.cpp:55
提前感谢您的任何帮助。
事实证明,这个问题是 100% 无关的。每当我不得不重新绘制它时,我都会在窗户上使用delwin。但是,此重绘通常是由另一个线程向其打印某些内容触发的。使用 wclear 而不是 delwin/newwin 可以修复所有问题,因为在我不需要时实际上并没有重绘 winp。诚然,无论如何,一开始这样做对我来说可能是愚蠢的。
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- 我的字符计数代码计算错误.为什么
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 尝试导入pybind-opencv模块时出现libgtk错误
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 在某些循环内使用vector.push_back时出现分段错误
- 如何接受 [ENTER] 键作为无效输入并发送错误消息
- 按下Enter时如何输入错误消息,但没有给出任何答案
- NCurses 在 wgetnstr 上出现段错误,除非先按 Enter 键
- 如果用户在没有输入的情况下按 Enter 键,则无法找出产生错误的方法