在gtk中获取断言失败错误。

时间:2016-05-30 09:12:50

标签: c gtk signals gtk3

我是使用GTK的新手。这是我的代码的一小部分。目的是复制整个当前行。内容存储在“行”中。 “start”和“end”是开始和结束时的文本。

gtk_text_iter_set_line_offset (start, 0); 
gtk_text_iter_forward_to_line_end (end);  
line = gtk_text_iter_get_text (start, end);

gtk_clipboard_set_text (clipboard, line, -1);

执行时,我收到以下错误消息。

Gtk[27786]: CRITICAL: gtk_text_iter_set_line_offset: assertion 'iter != NULL' failed
Gtk[27786]: CRITICAL: gtk_text_iter_forward_to_line_end: assertion 'iter != NULL' failed
Gtk[27786]: CRITICAL: gtk_text_iter_get_text: assertion 'start != NULL' failed
Gtk[27786]: CRITICAL: gtk_clipboard_set_text: assertion 'text != NULL' failed

代码块有什么问题?我该如何解决? 谢谢大家:))

1 个答案:

答案 0 :(得分:0)

你可能已经将你的迭代器声明为GtkTextIter *start。相反,根据GTK的文档中的text widget conceptual overview," GtkTextIter是一个设计用于在堆栈上分配的结构;它保证可以按值复制,并且永远不会包含任何堆分配的数据。"这意味着你不应该将它们声明为指针:

GtkTextIter start, end;
// ...
gtk_text_iter_set_line_offset (&start, 0); 
gtk_text_iter_forward_to_line_end (&end);  
line = gtk_text_iter_get_text (&start, &end);