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 estructura PTR se utiliza como una lista enlazada. Pero cuando depuro el código en gdb, descubrí que todos los ptr * se convirtieron a void *.
salida GDB:C++: ¿por qué un puntero auto de una estructura cambia automáticamente a void *
(gdb) pt ptr
type = struct ptr {
int node;
void *next;
public:
ptr(void);
ptr(int, void *);
}
Sin embargo, todavía se pueden ver los datos de la estructura si encubiertas de vuelta a ptr * en GDB.
¿Cuál es el motivo de esto, por favor?
Estoy usando Arch Linux, GNOME, g ++ 4.5.0, gdb 7.1. Sin banderas de compilación, pero a -g.
This GDB was configured as "i686-pc-linux-gnu"
Muestra '' ptr * en mi sistema. ¿Qué banderas de compilación usaste? ¿Qué versión de g ++ y gdb? – Thomas
Extraño, también uso gdb 7.1, pero g ++ 4.4.3. Las notas de la versión 4.5 no sugieren ningún tipo de cambio en esta dirección. http://gcc.gnu.org/gcc-4.5/changes.html – Thomas
Solo para completar algunos puntos de datos más, usando gdb 7.0.1 obtengo la respuesta correcta con g ++ 4.2.4 y 4.3.3 pero con 4.5. 0 gdb muestra el puntero como 'void *'. Parece un error en gcc (o gdb?) –