【问题标题】:C++ getnstr causes odd segmentation faultsC++ getnstr 导致奇怪的分段错误
【发布时间】:2021-04-10 02:04:10
【问题描述】:

所以我目前正在开发一个使用ncurses 进行输出和输入的项目。在这个程序中,用户应该能够,例如,写他的名字。我遇到的问题是getnstr,因为它会导致一些非常奇怪和无法解释的分段错误。例如,这里的代码可以正常工作:

#include <ncurses.h>
#include <string>

int main()
{
    char *word;
    initscr();
    WINDOW *window = newwin(100, 100, 0, 0);
    nodelay(window, false);
    refresh();

    mvwgetnstr(window, 0, 0, word, 10);
    mvwprintw(window, 0, 0, "Word written is %s", word);

    wrefresh(window);
    getch();
    endwin();
}

但是,如果我只在主函数内添加一个字符串变量,例如以这种形式:

#include <ncurses.h>
#include <string>

int main()
{
    std::string crashMe;

    char *word;
    initscr();
    WINDOW *window = newwin(100, 100, 0, 0);
    nodelay(window, false);
    refresh();

    mvwgetnstr(window, 0, 0, word, 10);
    mvwprintw(window, 0, 0, "Word written is %s", word);

    wrefresh(window);
    getch();
    endwin();
}

它会在您使用getnstr 进行的第一次按键操作时出现分段错误。我不确定它是否仅在我的计算机上,或者我是否对ncurses 做了一些可怕的错误,但我发现初始化字符串变量导致问题很奇怪。可以通过在与getnstr 相同的括号中引入额外的char* 来重现相同的问题。

如果有人对此问题有任何想法,我将不胜感激。如果它可能是导致我的分段错误的与 C 相关的事情,我想知道。无论哪种方式,提前致谢。

【问题讨论】:

    标签: c++ c segmentation-fault ncurses


    【解决方案1】:

    您要求将 10 个字符读入一个特别指向任何地方的指针。试试char word[10];char *word = malloc(10);

    那为什么有时会起作用?您未初始化的指针变量可能意外指向了可写的内存区域。您在某处覆盖了某些内容,这可能并不总是立即崩溃。

    我很确定这应该会产生编译器警告。始终使用-Wall 编译并注意输出。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-13
      相关资源
      最近更新 更多