2010-11-30 4 views
2

J'ai ce code. le pointeur tourne 0x0 immédiatement avant de l'utiliser. Bref avant, il avait la bonne adresse. J'utilise Gtkmm 2.4, mais il renvoie la valeur attendue, il tourne juste 0x0. Qu'est-ce qui ne va pas?Pointer instantanément 0x0

gdb preuve:

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() 

Je ne sais pas ce qui cause ce phénomène. as-tu?

Solution: en lisant la documentation. la fonction retour pcFolder compte de 1, get_column() de 0.

+0

À quoi ressemble 'get_column'? – Nim

+0

http://library.gnome.org/devel/gtkmm/2.22/classGtk_1_1TreeView.html#a513e50ad0acdd817d1a443f1eaa3debe – M3t0r

Répondre

3

L'appel de fonction:

preview->get_column(pcFolder); 

retourne NULL.

Lorsque gdb affiche la ligne de code en cours, elle n'a pas été exécutée jusqu'à ce que vous tapiez next.

Vous transmettez probablement un index plus grand que le nombre de colonnes dans preview. Essayez:

p pcFolder 
p preview->get_columns().size() 
+0

je reçois ces: (gdb) p pcFolder 6 $ = 5 (gdb) p> Preview- get_columns() taille (. Signal reçu du programme EXC_BAD_ACCESS, Impossible d'accéder à la mémoire. Raison: KERN_INVALID_ADDRESS à l'adresse: 0x0000000000000000 0x00000001000e7f7c dans Gtk :: TreeView :: get_columns() – M3t0r

+0

et pcfolder est défini via: int pcFolder = preview-> append_column ("Folder", cFolder); – M3t0r

+0

Désolé, je pense qu'il aurait dû être p aperçu-> get_columns(). Size() – chris

1
preview->get_column(pcFolder) 

doit être retourner 0.

2

preview->get_column(); NULL retourne, avant cela, sa juste une valeur aléatoire, puisque vous ne l'initialize col variables

2

meilleur code serait en fait d'initialiser la variable immédiatement sur l'utilisation en appelant getColumn au moment de la déclaration:

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

Si cette fonction peut retourner NULL (comme il semble) vous devez ensuite vérifier avant d'utiliser le pointeur, ainsi:

if(col != NULL) 
{ 
    col->set_resizable(true); 
} 
// else handle the "error" if you want