C ++: почему собственный указатель структуры автоматически меняется на void * - PullRequest
5 голосов
/ 07 мая 2010
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];

Структура ptr используется в качестве связанного списка. Но когда я отлаживал код в gdb, я обнаружил, что все ptr * были преобразованы в void *.
Выход GDB:

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

Тем не менее, я все еще могу увидеть данные структуры, если переверну их обратно в ptr * в GDB. В чем причина, пожалуйста?

Я использую Arch Linux, GNOME, g ++ 4.5.0, gdb 7.1. Без каких-либо флагов компиляции, кроме -g.
This GDB was configured as "i686-pc-linux-gnu"

Ответы [ 3 ]

1 голос
/ 11 декабря 2010

Может быть, это: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45088

Мне нужно поблагодарить Тома Троми за то, что он сказал мне это.

1 голос
/ 07 мая 2010

У меня нормально работает на OS X.

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

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

версия 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 голосов
/ 11 декабря 2010

Следует отметить, что "ptr" - это / не / умный указатель, это просто структура, в которой даже нет деструктора.

(Умные указатели имеют очень точное значение в C ++ land)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...