"gtk_text_buffer_get_bounds"功能导致隔离错误

"gtk_text_buffer_get_bounds" function causes SEGFAULT

本文关键字:隔离 错误 功能 get gtk text buffer bounds      更新时间:2023-10-16

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

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

我做错了什么?

#include <iostream>
#include <gtk/gtk.h>
int main ()
{
  const char *string1 = "hello", *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;
}

您将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);