2011-04-19 4 views
1

私は正常に動作しているコードのこのビット、持っている:webがスコープ内にまだあるが、スコープの外に落ちたsettingsいくつかの後の時点でGlib :: RefPtrがスコープの外に出た後のSIGSEGV?

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

を、私は次の操作を行います

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

このは、で作成した元の設定オブジェクトを復元する必要があります。しかし、実際に何が起こることは、私は次の出力で、(get_settingsから呼び出される)Glib::wrap_autoでSIGSEGVを取得することです:

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など)に関する経験はありません。

関連する問題