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];
Le struct ptr est utilisé comme une liste chaînée. Mais quand je débogue le code dans gdb, j'ai trouvé que les ptr * étaient tous convertis en void *.
sortie GDB:C++: pourquoi un pointeur auto d'une struct change automatiquement void *
(gdb) pt ptr
type = struct ptr {
int node;
void *next;
public:
ptr(void);
ptr(int, void *);
}
Cependant, je peux encore voir les données de la struct si je les Covert retour à ptr * gdb.
Quelle est la raison pour cela s'il vous plaît? J'utilise Arch Linux, GNOME, g ++ 4.5.0, gdb 7.1. Sans drapeaux de compilation mais un -g.
This GDB was configured as "i686-pc-linux-gnu"
Il montre '' * ptr sur mon système. Quels drapeaux de compilation avez-vous utilisés? Quelle version de g ++ et gdb? – Thomas
Etrange, j'utilise aussi gdb 7.1, mais g ++ 4.4.3. Les notes de version 4.5 ne suggèrent aucun changement dans cette direction. http://gcc.gnu.org/gcc-4.5/changes.html – Thomas
Juste pour remplir plus de points de données, en utilisant gdb 7.0.1 j'obtiens la réponse correcte avec g ++ 4.2.4 et 4.3.3 mais avec 4.5. 0 gdb montre le pointeur comme un «void *». On dirait un bug dans gcc (ou gdb?) –