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];
Các struct ptr được sử dụng như một danh sách liên kết. Nhưng khi tôi gỡ lỗi mã trong gdb, tôi thấy rằng ptr * đã được chuyển đổi thành void *.
GDB đầu ra:C++: tại sao một con trỏ tự của một struct tự động thay đổi để làm mất hiệu lực *
(gdb) pt ptr
type = struct ptr {
int node;
void *next;
public:
ptr(void);
ptr(int, void *);
}
Tuy nhiên, tôi vẫn có thể xem dữ liệu của struct nếu tôi bí mật chúng trở lại ptr * trong gdb.
Lý do cho việc này là gì?
Tôi đang sử dụng Arch Linux, GNOME, g ++ 4.5.0, gdb 7.1. Không có cờ biên dịch nào nhưng a -g.
This GDB was configured as "i686-pc-linux-gnu"
Nó hiển thị 'ptr *' trên hệ thống của tôi. Bạn đã sử dụng những cờ biên dịch nào? Phiên bản nào của g ++ và gdb? – Thomas
Lạ, tôi cũng sử dụng gdb 7.1, nhưng g ++ 4.4.3. Ghi chú phát hành 4,5 không gợi ý bất kỳ sự thay đổi nào theo hướng này. http://gcc.gnu.org/gcc-4.5/changes.html – Thomas
Chỉ cần điền vào một số điểm dữ liệu khác, sử dụng gdb 7.0.1 tôi nhận được câu trả lời đúng với g ++ 4.2.4 và 4.3.3 nhưng với 4.5. 0 gdb hiển thị con trỏ dưới dạng 'void *'. Hình như một lỗi trong gcc (hoặc gdb?) –