C ++:为什么struct的self指针自动变为void *

时间:2010-05-07 07:24:18

标签: c++ pointers struct gdb

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];

struct ptr 用作链接列表。但是当我在gdb中调试代码时,我发现ptr *都被转换为void * GDB输出:

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

但是,如果我将它们转换回gdb中的ptr *,我仍然可以看到结构的数据 请问这是什么原因?

我正在使用Arch Linux,GNOME,g ++ 4.5.0,gdb 7.1。没有任何编译标志但是-g。
This GDB was configured as "i686-pc-linux-gnu"

3 个答案:

答案 0 :(得分:1)

在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".

答案 1 :(得分:1)

也许这样:http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45088

我要感谢Tom Tromey告诉我这个。

答案 2 :(得分:0)

应该提到“ptr”是/不是/智能指针,它只是一个结构,甚至没有析构函数。

(智能指针在C ++领域具有非常精确的含义)