Я использую этот код:
class editbook
{
GtkWidget* _nbook;
std::vector<GtkWidget*> _srcset; //and so on...
...........................................................................................
void editbook::add_page()
{
GtkWidget* tmp = gtk_source_view_new();
_srcset.push_back(tmp);
gtk_notebook_append_page(GTK_NOTEBOOK(_nbook),tmp,gtk_label_new("untitled"));
}
...........................................................................................
void editbook::set_text(const std::string& text)
{
int index = gtk_notebook_get_current_page(GTK_NOTEBOOK(_nbook));
GtkTextBuffer* tbuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(_srcset[index]));
gtk_text_buffer_set_text(GTK_TEXT_BUFFER(tbuffer),text.c_str(),-1);
}
Компилируется нормально. Но дает эту странную ошибку времени выполнения:
Ошибка сегментации: возврат 139
Я проследил проблему до: gtk_text_view_get_buffer(GTK_TEXT_VIEW(_srcset[index]));
ПРИМЕЧАНИЕ. Я использую GtkSourceView вместо GtkTextView, но это может не быть проблемой, потому что я получаю ту же ошибку, когда пытаюсь использовать GtkTextView.
ПРИМЕЧАНИЕ. Я использую Gtk 2x.
ПРИМЕЧАНИЕ. Я не уверен, следует ли помечать этот вопрос как C или C++. быть Gtk+ — это C-lib. Но я использую С++. Так что я просто пометить обоих на данный момент.
_srcset
? Кстати, почему бы вам не использоватьGtkMM
( gtkmm.org/en ), который является оболочкой C++ надGtk
если вы хотите написать свой код на C++? - person another.anon.coward   schedule 22.09.2011std::vector<GtkWidget*> _srcset
. Заполнен GtkSourceViews (gtk_source_view_new()); Что касается ГТКММ. Честно говоря, я не использую его, потому что я идиот... И потому что он по какой-то причине не компилируется в Ubuntu (glibmmconfig.h не найден) - person ApprenticeHacker   schedule 22.09.2011_srcset[index]
должен быть действительной ссылкой во время выполнения. - person sehe   schedule 22.09.2011NULL
и являются ли они допустимыми объектами? Я имею в виду, каков результат дляGTK_IS_TEXT_VIEW(_srcset[index])
иGTK_IS_TEXT_BUFFER(tbuffer)
? Кроме того, я бы посоветовал вам использоватьvector::at
вместоoperator[]
, чтобы быть уверенным, что вы не выходите за пределы допустимого диапазона. - person another.anon.coward   schedule 22.09.2011