C++ getnstr 导致奇怪的分段错误
C++ getnstr causes odd segmentation faults
所以我目前正在开发一个使用 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 相关事物。无论哪种方式,提前致谢。
您要求将 10 个字符读入一个指向特定位置的指针。试试 char word[10];
或 char *word = malloc(10);
那为什么有时会奏效呢?您未初始化的指针变量可能意外地指向了可写内存区域。你在某处覆盖了一些东西,这可能并不总是立即崩溃。
我很确定应该会产生编译器警告。始终使用 -Wall
编译并注意输出。
所以我目前正在开发一个使用 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 相关事物。无论哪种方式,提前致谢。
您要求将 10 个字符读入一个指向特定位置的指针。试试 char word[10];
或 char *word = malloc(10);
那为什么有时会奏效呢?您未初始化的指针变量可能意外地指向了可写内存区域。你在某处覆盖了一些东西,这可能并不总是立即崩溃。
我很确定应该会产生编译器警告。始终使用 -Wall
编译并注意输出。