2

私はこのコードを持っています。ポインタは使用直前に0x0になります。少し前に、それは正しいアドレスを持っていました。

TreeViewColumn *col;
col = preview->get_column(pcFolder); /* col = 0x7fff5fc404a0 */
col->set_resizable(true);            /* col = 0x0 */

私はGtkmm2.4を使用していますが、期待値を返し、0x0になります。どうしたの?

gdbプルーフ:

151             col = preview->get_column(pcFolder); /* col = 0x7fff5fc404a0 */
(gdb) print col
$1 = ('Gtk::TreeViewColumn' *) 0x7fff5fc404a0
(gdb) print *col
warning: can't find linker symbol for virtual table for `Gtk::TreeViewColumn' value
$2 = {
  <Gtk::Object> = {
    <Glib::Object> = {
      <Glib::ObjectBase> = <invalid address>, 
      members of Glib::Object: 
      _vptr$Object = 0x7fff5fc06a20, 
      static object_class_ = {<No data fields>}
    }, 
    members of Gtk::Object: 
    static object_class_ = {<No data fields>}, 
    referenced_ = 21, 
    gobject_disposed_ = 60
  }, 
  members of Gtk::TreeViewColumn: 
  static treeviewcolumn_class_ = {<No data fields>}
}
(gdb) next
152             col->set_resizable(true);            /* col = 0x0 */
(gdb) print col
$3 = ('Gtk::TreeViewColumn' *) 0x0
(gdb) print *col
Cannot access memory at address 0x0
(gdb) next

Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_INVALID_ADDRESS at address: 0x0000000000000000
0x00000001000edc68 in Gtk::TreeViewColumn::set_resizable ()

何がこの現象を引き起こしているのか分かりません。ありますか?

解決策: ドキュメントを読んでください。pcFolderを返す関数は1からカウントし、get_column()は0からカウントします。

4

4 に答える 4

3

関数呼び出し:

preview->get_column(pcFolder);

NULLを返します。

gdbに現在のコード行が表示されている場合、nextと入力するまで実行されません。

おそらく、の列数よりも大きいインデックスを渡しますpreview。試す:

p pcFolder
p preview->get_columns().size()
于 2010-11-30T10:51:06.103 に答える
2

preview->get_column();col変数を初期化していないため、NULLを返します。その前は、ランダムな値です。

于 2010-11-30T10:50:13.903 に答える
2

より良いコードは、実際には、宣言の時点でgetColumnを呼び出して、使用時にすぐに変数を初期化することです。

TreeViewColumn *col = preview->get_column(pcFolder);

この関数がNULLを返す可能性がある場合(見た目どおり)、ポインターを使用する前に確認する必要があります。したがって、次のようになります。

if( col != NULL )
{
   col->set_resizable( true );
}
// else handle the "error" if you want
于 2010-11-30T11:04:50.073 に答える
1
preview->get_column(pcFolder)

0を返す必要があります。

于 2010-11-30T10:49:28.980 に答える