c++ - C++ getnstr 导致奇怪的分段错误
问题描述
所以我目前正在开发一个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
但我发现初始化字符串变量导致问题很奇怪。可以通过char*
在与getnstr
.
如果有人对此问题有任何想法,我将不胜感激。如果它可能是导致我的分段错误的与 C 相关的事情,我想知道。无论哪种方式,提前谢谢。
解决方案
您要求将 10 个字符读入一个特别指向任何地方的指针。尝试char word[10];
要么char *word = malloc(10);
那么为什么有时会起作用呢?您未初始化的指针变量可能意外指向了可写的内存区域。你在某个地方覆盖了一些东西,这可能并不总是立即崩溃。
我很确定应该会产生编译器警告。始终编译-Wall
并注意输出。
推荐阅读
- javascript - 是否可以将 node.js 文件链接到 HTML?
- reactjs - ReactJs HighCharts 切换表和图表未更新
- ruby-on-rails - 当您执行“./bin/rails action_text:install”时,Rails 中的 create_table 方法中的 long 是什么意思?
- fortran - 使用 OpenMP 并行化 Fortran 中的格式化写入
- c++ - 为什么这个涉及具有不可移动类型的 boost::transform_iterator 的代码不起作用?
- javascript - TinyMCE 图像类问题
- android - Dagger-2:未注入字段
- angular - 嵌入与 ng-content 子项的不同 ChangeDetectionStrategy.OnPush 行为
- php - PHP 和 MySQL。将 Connect-DB 包含在函数之外
- excel - 通过单选按钮删除多个选定的行