2010-05-07 9 views
5
struct ptr{ 
    int node; 
    ptr *next; 
    ptr(){} 
    ptr(int _node, ptr *_next){ node=_node; next=_next; } 
}; 
struct list_t{ 
    ptr *sht; 
    int size; 
    void push(int node){ 
     size++; 
     sht=new ptr(node,sht); 
    } 
}shthead[100001], comp[200001], tree[200001]; 

La struct PTR viene utilizzato come una lista collegata. Ma quando eseguo il debug del codice in gdb, ho scoperto che i ptr * sono stati tutti convertiti in void *.
uscita GDB:C++: il motivo per cui un puntatore di auto di una struttura cambia automaticamente a void *

(gdb) pt ptr 
type = struct ptr { 
    int node; 
    void *next; 
    public: 
    ptr(void); 
    ptr(int, void *); 
}

Tuttavia, posso ancora vedere i dati del struct se Covert di nuovo al PTR * in gdb.
Qual è il motivo per questo per favore?

Sto usando Arch Linux, GNOME, g ++ 4.5.0, gdb 7.1. Senza alcun flag di compilazione ma un -g.
This GDB was configured as "i686-pc-linux-gnu"

+0

Mostra 'ptr *' sul mio sistema. Quali flag di compilazione hai usato? Quale versione di g ++ e gdb? – Thomas

+0

Strano, uso anche gdb 7.1, ma g ++ 4.4.3. Le note di rilascio 4.5 non suggeriscono alcun tipo di modifica in questa direzione. http://gcc.gnu.org/gcc-4.5/changes.html – Thomas

+0

Solo per inserire altri punti dati, usando gdb 7.0.1 ottengo la risposta corretta con g ++ 4.2.4 e 4.3.3 ma con 4.5. 0 gdb mostra il puntatore come 'void *'. Sembra un bug in gcc (o gdb?) –

risposta

1

funziona bene per me su OS X.

(gdb) pt ptr 
type = class ptr { 
    public: 
    int node; 
    ptr *next; 

    ptr(void); 
    ptr(int, ptr *); 
} 

versione gdb:

Shadow:code dkrauss$ gdb -v 
GNU gdb 6.3.50-20050815 (Apple version gdb-1346) (Fri Sep 18 20:40:51 UTC 2009) 
Copyright 2004 Free Software Foundation, Inc. 
GDB is free software, covered by the GNU General Public License, and you are 
welcome to change it and/or distribute copies of it under certain conditions. 
Type "show copying" to see the conditions. 
There is absolutely no warranty for GDB. Type "show warranty" for details. 
This GDB was configured as "x86_64-apple-darwin". 
0

Va detto che "ptr" è/non/un puntatore intelligente, è solo una struttura, una che non ha nemmeno un distruttore.

(I puntatori intelligenti hanno un significato molto preciso in C++ land)

+0

Beh, mi dispiace per quello. Non avrei dovuto dire "un puntatore intelligente" qui con una vaga comprensione di loro. Il testo è stato corretto ora. – Stone

+0

Nessun danno fatto. :) – Arafangion

Problemi correlati