"gtk_text_buffer_get_bounds" 函数导致 SEGFAULT
"gtk_text_buffer_get_bounds" function causes SEGFAULT
我正在编写一个 GTK 应用程序,我需要将一个字符串放入 GtkTextBuffer 中,然后再将相同的文本提取回一个单独的字符串中。出于某种原因,我在 "gtk_text_buffer_get_bounds" 函数期间不断收到 SEGFAULT 错误。我认为这是 "e" 迭代器的问题,但我不确定。
我已将有问题的操作隔离到一个较小的示例程序中。下面的过程与我的申请中的过程没有区别。
我做错了什么?
#include <iostream>
#include <gtk/gtk.h>
int main ()
{
const char *string1 = "hello[=11=]", *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;
}
您将 s
和 e
声明为指针,并且它们将默认初始化为 nullptr
,因此当 gtk_text_buffer_get_bounds
和 gtk_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);
我正在编写一个 GTK 应用程序,我需要将一个字符串放入 GtkTextBuffer 中,然后再将相同的文本提取回一个单独的字符串中。出于某种原因,我在 "gtk_text_buffer_get_bounds" 函数期间不断收到 SEGFAULT 错误。我认为这是 "e" 迭代器的问题,但我不确定。
我已将有问题的操作隔离到一个较小的示例程序中。下面的过程与我的申请中的过程没有区别。
我做错了什么?
#include <iostream>
#include <gtk/gtk.h>
int main ()
{
const char *string1 = "hello[=11=]", *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;
}
您将 s
和 e
声明为指针,并且它们将默认初始化为 nullptr
,因此当 gtk_text_buffer_get_bounds
和 gtk_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);