c++ - C++ GTKMM,在文本缓冲区中得到一个奇怪的输出
问题描述
我是 Gtkmm 的新手,并试图将 txt 文件加载到文本缓冲区中。当我启动我的程序时,我得到这样的输出:输出
我填充文本缓冲区的代码如下所示:
void ExampleGui::fill_buffers()
{
FILE *fp = fopen("/home/User/Documents/Gui/test1.txt", "r");
if (fp == NULL)
exit(EXIT_FAILURE);
char *line = NULL;
size_t len = 0;
char *output = NULL;
while ((getline(&line, &len, fp)) != -1) {
output = line;
}
fclose(fp);
if (line)
free(line);
m_refTextBuffer1 = Gtk::TextBuffer::create();
m_refTextBuffer1->set_text("Welcome!\nClick the button Show Text to start.");
m_refTextBuffer2 = Gtk::TextBuffer::create();
m_refTextBuffer2->set_text(Glib::convert_with_fallback(output, "UTF-8", "ISO-8859-1"));
}
我怎样才能修复那个错误的输出,为什么我会得到它?
解决方案
这里的主要问题output = line
是free(line)
.
因为output
指向相同的内存line
意味着output
变得无效。
在完成字符串之前不要释放内存,或者复制字符串line
(分配不这样做)。
推荐阅读
- node.js - 如何在使用 create-react-app 创建的应用程序中设置环境变量?
- android - 使用 FCM 的 Android 通知
- jquery - 在 jquery 中检查多个条件
- postgresql - Sequelize Many to Many Include 失败,列不存在
- javascript - 附加不同承诺链时 Javascript 承诺的执行顺序
- java - BufferedRead 只读取文本文件的第一行
- rust - 跨多个文件拆分 rust 库函数
- flutter - 我如何在地图功能中等待未来?
- sql - XPATH Postgres。用他的 children 属性获取节点
- javascript - 自动更新页面上的内容而不重新加载整个页面