2011-04-19 3 views
1

У меня есть этот кусок кода, который работает отлично:SIGSEGV после Glib :: RefPtr выходит за рамки?

WebKit::WebView web; 
// later: 
{ 
    Glib::RefPtr<WebKit::WebSettings> settings = WebKit::WebSettings::create(); 
    // do some stuff to the object 
    web.set_settings(settings); 
} 

В более позднее время, когда web еще в объеме, но settings выпал из сферы, я следующее:

Glib::RefPtr<WebKit::WebSettings> settings = web.get_settings(); 

Этот должен восстановить исходный объект настроек, созданный выше. Однако то, что на самом деле происходит то, что я получаю SIGSEGV в Glib::wrap_auto (вызывается из get_settings) со следующим выходом:

GLib-GObject-CRITICAL **: g_object_get_qdata: assertion `G_IS_OBJECT (object)' failed 

Мое предположение, что каким-то образом, когда первый settings указатель выпал из сферы его уничтожили базовый объект, несмотря на то, что он присваивается свойству другого объекта. Почему это происходит? Предположительно, я делаю что-то неправильно выше, но код кажется мне нормальным. (Я предполагаю, что присвоение объекта объекту увеличит счетчик ссылок объекта C.)

ответ

0

Возможно, это ошибка в привязке. Вы должны сообщить об этом.

+0

Да, это похоже. Недавно я возился с обновлением привязок, чтобы исправить эту проблему, а также включить новые функции webkit в противном случае. – Miral

0

Попробуйте это. Понятия не имею, если он будет работать или нет: P

{ 
    Glib::RefPtr<WebKit::WebSettings> *settings = new WebKit::WebSettings::create(); 
    // do some stuff to the object (use -> instead of . since it's a pointer) 
    web.set_settings(*settings); // dereference the pointer 
} 

// later 
Glib::RefPtr<WebKit::WebSettings> settings = web.get_settings(); 

Причина Я думаю это будет работать не потому, что установка некоторых параметров указатель будет выделять память в куче, а указатель будет выходить за рамки, но сам объект не будет. Я мог ошибаться, но это просто предсказатель программиста на C++, у меня нет опыта в том, с чем вы работаете (webkit, gtk и т. Д.).

Смежные вопросы