德尔温(stdscr)合法吗?

德尔温(stdscr)合法吗?,c,linux,curses,C,Linux,Curses,如果这是合法的,我是否应该在退出ncurses时始终这样称呼?还是从endwin()自动调用它?执行delwin(stdscr)的后果是什么?这是多个问题: 如果这是合法的,我是否应该在退出ncurses时始终这样称呼 还是从endwin()自动调用 做delwin(stdscr)的后果是什么 前两个是等价的(在任何curses的实现中都不需要它,也不是endwin所做的事情)。那就问两个问题吧。第一个问题询问delwin和endwin之间的关系,另一个问题询问delwin的具体行为。后者很

如果这是合法的,我是否应该在退出ncurses时始终这样称呼?还是从
endwin()自动调用它?执行delwin(stdscr)的后果是什么?

这是多个问题:

  • 如果这是合法的,我是否应该在退出ncurses时始终这样称呼
  • 还是从endwin()自动调用
  • 做delwin(stdscr)的后果是什么
前两个是等价的(在任何curses的实现中都不需要它,也不是
endwin
所做的事情)。那就问两个问题吧。第一个问题询问
delwin
endwin
之间的关系,另一个问题询问
delwin
的具体行为。后者很有趣

实际上,它可能依赖于实现

仅限于ncurses(每个标签)

  • 召唤
  • ,其中
  • ,它对每个
    curscr
    newscr
    stdscr
    进行特殊检查(如果要删除的窗口恰好匹配,则在释放其各自的数据之前,将这些全局变量的值设置为NULL)
所以它适用于网络课程。我在中添加了此功能:

关于便携性:

  • 不这样做
  • 确实如此(但从2006年开始,可能是模仿)
  • Solaris没有,它的X/Open()风格也没有
有两个问题。另一个方面是endwin。这永远不会删除窗口,因为在调用
endwin
之后,始终可以调用
wrefresh
。它位于:


但是,如果在
endwin()
wrefresh(stdscr)
调用之间执行了
delwin(stdscr)
,ncurses将为后者返回一个错误。NetBSD(查看它是否会取消对空指针的引用)和Solaris都会转储core。

如果它不合法,肯定会有人逃脱惩罚。我也觉得很有趣。谢谢你的回答!我认为
endwin()
也可以释放与诅咒相关的东西,这是错误的。我想知道为什么瓦尔格兰德如此讨厌ncurses。我原以为这涉及到一些创造性的记忆管理,但现在我知道了原因。:-)这是一个常见问题:
    + modify _nc_freewin() to reset globals curscr/newscr/stdscr when
      freeing the corresponding WINDOW (found using Purify).
   Calling refresh(3x) or doupdate(3x) after a temporary escape causes the
   program to resume visual mode.