2010-05-07 12 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 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"

+0

Muestra '' ptr * en mi sistema. ¿Qué banderas de compilación usaste? ¿Qué versión de g ++ y gdb? – Thomas

+0

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

+0

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?) –

Respuesta

1

me da buenos resultados en OS X.

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

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

versión 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

Cabe mencionar que "ptr" es/no/un puntero inteligente, es solo una estructura, que ni siquiera tiene un destructor.

(punteros inteligentes tienen un significado muy preciso en la tierra C++)

+0

Bueno, lo siento mucho por eso. No debería haber dicho "un puntero inteligente" aquí con una vaga comprensión de ellos. El texto ha sido corregido ahora. – Stone

+0

No hay daño hecho. :) – Arafangion

Cuestiones relacionadas