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"
Mostra 'ptr *' sul mio sistema. Quali flag di compilazione hai usato? Quale versione di g ++ e gdb? – Thomas
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
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?) –