【问题标题】:"gtk_text_buffer_get_bounds" function causes SEGFAULT“gtk_text_buffer_get_bounds”函数导致 SEGFAULT
【发布时间】:2019-08-25 12:17:20
【问题描述】:

我正在编写一个 GTK 应用程序,我需要将一个字符串放入 GtkTextBuffer 中,然后再将相同的文本提取回一个单独的字符串中。出于某种原因,我在“gtk_text_buffer_get_bounds”函数期间不断收到 SEGFAULT 错误。我认为这是“e”迭代器的问题,但我不确定。

我已将违规操作隔离到一个较小的示例程序中。下面的过程与我的应用程序中的过程没有区别。

我做错了什么?

#include <iostream>
#include <gtk/gtk.h>
int main ()
{
  const char *string1 = "hello\0", *string2;
  GtkTextBuffer *text = gtk_text_buffer_new (NULL);
  GtkTextIter *s, *e;

  gtk_text_buffer_set_text (text, string1, -1);
  gtk_text_buffer_get_bounds (text, s, e);
  string2 = gtk_text_buffer_get_text (text, s, e, TRUE);
  std::cout << string2 << std::endl;
  return 0;
}

【问题讨论】:

    标签: c++ iterator segmentation-fault gtk gtk3


    【解决方案1】:

    您将se 声明为指针,并且它们被默认初始化为nullptr,因此当gtk_text_buffer_get_boundsgtk_text_buffer_get_text 开始使用它们时,您会得到一个空指针解引用和段错误:

    GtkTextIter *s, *e;
    ...
    gtk_text_buffer_get_bounds (text, s, e);
    ...
    string2 = gtk_text_buffer_get_text (text, s, e, TRUE);
    

    相反,您可以在堆栈上分配 GtkTextIter 对象并传递它们的地址:

    GtkTextIter s, e;
    ...
    gtk_text_buffer_get_bounds (text, &s, &e);
    ...
    string2 = gtk_text_buffer_get_text (text, &s, &e, TRUE);
    

    【讨论】:

      猜你喜欢
      • 2020-02-29
      • 2010-12-25
      • 2016-10-12
      • 2019-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-14
      • 1970-01-01
      相关资源
      最近更新 更多