2016-05-30 22 views
0

GTKを初めて使用しました。ここに私のコードの小さな部分があります。目的は現在の行全体をコピーすることです。内容は「行」に格納されます。 "start"と "end"は、行の始まりと終わりのテキストライターです。gtkでアサーションに失敗しました。

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 

コードブロックに問題がありますか?どうすれば解決できますか? ありがとうございました。

+3

これらの関数には、Cの文字列の代わりにNULLポインタを渡します。エラーがどこにあるかを理解するためのコードを追加してください。 – Boiethios

+0

ここで 'start'と' end'がどのように定義されているのかを考えてみましょう。 – sjsam

答えて

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); 
+0

ありがとう!出来た :) –

関連する問題