【发布时间】:2010-05-07 07:24:18
【问题描述】:
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"
【问题讨论】:
-
它在我的系统上显示
ptr *。您使用了哪些编译标志? g++和gdb是什么版本的? -
奇怪,我也用gdb 7.1,但是g++ 4.4.3。 4.5 发行说明没有暗示这个方向的任何变化。 gcc.gnu.org/gcc-4.5/changes.html
-
只是为了填写更多数据点,使用 gdb 7.0.1 我得到了 g++ 4.2.4 和 4.3.3 的正确答案,但使用 4.5.0 gdb 将指针显示为
void*.看起来像 gcc(或 gdb?)中的错误