gpt4 book ai didi

c++ - GtkTextBuffer 的问题,令人困惑的运行时错误。需要帮忙?

转载 作者:行者123 更新时间:2023-11-28 08:16:42 26 4
gpt4 key购买 nike

我正在使用这段代码:

class editbook
{
GtkWidget* _nbook;
std::vector<GtkWidget*> _srcset; //and so on...

................................................ .....................................................

void editbook::add_page()
{
GtkWidget* tmp = gtk_source_view_new();
_srcset.push_back(tmp);
gtk_notebook_append_page(GTK_NOTEBOOK(_nbook),tmp,gtk_label_new("untitled"));
}

................................................ .....................................................

void editbook::set_text(const std::string& text)
{
int index = gtk_notebook_get_current_page(GTK_NOTEBOOK(_nbook));
GtkTextBuffer* tbuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(_srcset[index]));
gtk_text_buffer_set_text(GTK_TEXT_BUFFER(tbuffer),text.c_str(),-1);
}

编译正常。但是给出了这个奇怪的运行时错误:

段错误:返回139

我已将问题追溯到:gtk_text_view_get_buffer(GTK_TEXT_VIEW(_srcset[index]));

注意:我使用的是 GtkSourceView 而不是 GtkTextView,但这可能不是问题,因为我在尝试 GtkTextView 时遇到了同样的错误。

注意:我使用的是 Gtk 2x

注意:我不确定是用 C 还是 C++ 标记这个问题。因为。 Gtk+ 是一个 C 库。但我正在使用 C++。所以我现在只标记两者。

最佳答案

您的代码中的问题可能是通过 gtk_notebook_append_page 添加到 GtkNotebook 的子部件不是可见,尝试通过显示子部件gtk_widget_show 调用。这些线上的东西:

void editbook::add_page()
{
GtkWidget* tmp = gtk_source_view_new();
_srcset.push_back(tmp);
gtk_widget_show(tmp); //Show the child widget to make it visible
gtk_notebook_append_page(GTK_NOTEBOOK(_nbook),tmp,gtk_label_new("untitled"));
}

当您使用 gtk_notebook_get_current_page 时,如果没有任何子窗口小部件可见,则它返回 -1,我认为这可能会发生在您的情况中并且作为 index -1 当您使用 operator[] 时,它不检查程序崩溃的边界。我强烈建议您使用 vector::at 而不是使用 operator[] 以便在运行时得到 std::out_of_range 异常来指示问题。你可以使用:

void editbook::set_text(const std::string& text)
{
int index = gtk_notebook_get_current_page(GTK_NOTEBOOK(_nbook));
GtkTextBuffer* tbuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(_srcset.at(index)));
gtk_text_buffer_set_text(GTK_TEXT_BUFFER(tbuffer),text.c_str(),-1);
}

希望这对您有所帮助!

关于c++ - GtkTextBuffer 的问题,令人困惑的运行时错误。需要帮忙?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7512619/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com