Tôi đang cố gắng phá vỡ deque của mình nhưng không hiểu sao tôi lại thất bại. Tôi đã viết đoạn mã sau (deque là một con trỏ, nó trỏ đến phần tử đầu tiên của deque). DequeItem là cấu trúc có trường tiếp theo (con trỏ tới phần tử tiếp theo) và dữ liệu (void *).
void deque_destroy(DequeItem **deque) {
DequeItem *temp;
DequeItem *mục;
for (item = *deque; item != NULL; item = temp) {
printf("%d", *((int*)((item)->data)));
tạm thời = mục->tiếp theo;
miễn phí(mục);
}
}
Khai báo cấu trúc là:
cấu trúc DequeItem {
void *data; // Dữ liệu được lưu trữ trong mục deque
struct DequeItem *previous; // Con trỏ tới DequeItem trước đó trong vòng
struct DequeItem *next; // Con trỏ tới DequeItem tiếp theo trong vòng
};
typedef struct DequeItem DequeItem;
có vẻ đúng, đọc nhiệt độ
之前Bạn gọi dự án miễn phí()
Làm tốt lắm, đây là lỗi phổ biến dành cho người mới bắt đầu mà bạn đã tránh được.
Tôi nghĩ bạn cần cung cấp thêm thông tin về vấn đề là gì và có thể là một tuyên bố mang tính cấu trúc.
data
Các thành viên cũng được cấp phát bộ nhớ động phải không? Nếu vậy, bạn có thể cần một miễn phí(mục->dữ liệu);
Được gọi, điều này cũng phụ thuộc vào cách nó được phân bổ khi dự án được tạo.
Như một người bình luận đã chỉ ra, data
Con trỏ có thể NULL
Vì vậy bạn nên kiểm tra trước khi in:
if(item->data != NULL)
printf("%d\n", *(int *) item->data);
Để ý:
- Đơn giản hóaBiểu thức chuyển đổi dễ đọc hơn.
- hiện hữu
printf()
Chuỗi chứa ký tự dòng mới ('\N'
) để tránh nhầm lẫn bộ đệm và các giá trị riêng biệt về mặt trực quan.
Tôi là một lập trình viên xuất sắc, rất giỏi!