Tôi có một bài tập yêu cầu chúng tôi triển khai lớp danh sách được liên kết kép. Đối với một số lý do họ định nghĩa nút struct
như sau:Danh sách liên kết đôi trong C++
struct node {
node *next;
node *prev;
T *o;
};
Dường như với tôi rằng nó sẽ dễ dàng hơn rất nhiều để viết lớp nếu hội viên struct 'dữ liệu' không phải là một con trỏ. Không cần phải nói rằng tôi không thể thay đổi nó vì vậy tôi sẽ phải làm việc xung quanh nó. Tôi đã cố gắng thực hiện các phương pháp mà thêm phần tử vào đầu danh sách như sau:
template <typename T>
void Dlist<T>::insertFront(T *o) {
node *np = new node;
T val = *o;
np->o = &val;
np->prev = NULL;
np->next = first;
if (!isEmpty()) {
first->prev = np;
} else {
last = np;
}
first = np;
}
khi sử dụng đđ để gỡ lỗi tôi nhận ra rằng tất cả mọi thứ hoạt động tốt lần đầu tiên bạn chèn một số nhưng lần thứ hai xung quanh tất cả mọi thứ được screwed up kể từ khi bạn đặt 'val' thành phần tử mới, nó sẽ "ghi đè" cái đầu tiên kể từ khi địa chỉ bộ nhớ của val được sử dụng. Tôi đã thử làm những việc khác như thay vì chỉ có biến 'val' thực hiện như sau:
T *valp = new T;
T val;
valp = &val;
val = *o;
np->o = valp
Điều này dường như không hoạt động. Tôi nghĩ rằng điều này là bởi vì nó khá nhiều chỉ là một hình thức phức tạp hơn những gì tôi đã làm ở trên chỉ với một rò rỉ bộ nhớ bổ sung :)
Bất kỳ ý tưởng/con trỏ đi đúng hướng sẽ là tuyệt vời.
+1 cho bài tập về nhà từ chối trách nhiệm đáng kính. –
Hãy xem xét điều này, câu trả lời đầu tiên có thể giúp bạn hiểu vấn đề: http://stackoverflow.com/questions/5727/what-are-the-barriers-to-understanding-pointers-and-what-can-be -done-to-crossed – Dan
Khi bạn có cơ hội cũng hãy xem xét điều này: http://stackoverflow.com/questions/599308/proper-stack-and-heap-usage-in-c - sự khác biệt giữa ngăn xếp và phân bổ đống. – Dan