Từ 1 tới 5 trên tổng số 5 kết quả

Đề tài: Chút rắc rối về con trỏ đây.

  1. #1
    Ngày gia nhập
    09 2007
    Bài viết
    17

    Mặc định Chút rắc rối về con trỏ đây.

    <sorry anh em nếu có sai chính tả nhé. Màn hình mờ quá tớ ko đọc ra chữ nữa. Đau mắt wá>

    Tối nay nghiên cứu đoạn code của đứa bạn thấy lỗi này mà ko hiểu rõ nỗi mấu chốt của nó vứt lên đây cho anh em xem thử.

    Chuyện này thuộc về xóa 1 nút trong dslk . Đơn giản thôi nhưng cũng mệt chán.
    template <class T>
    void deleteFirst()
    {
    CLinkList<T> *temp;
    temp = top;
    top = top->next;
    delete temp;

    }

    Tớ viết gọn lại là thế. Lỗi báo được mô tả như sau :
    F5 sau khi chạy qua lệnh gán top = top->next :
    Ta có:
    temp : 0x123456; info = 3; next = 0x123457;
    top : 0x123457 info =4 ; next = 0x123458;
    Tiếp tục chạy lệnh delete:
    temp =0x123456 , info = random; next = ?
    top = 0x123457 info = radom , next = ?

    Thật là vô lý nhỉ ? Rõ ràng chúng ta đã cắt đứt l.lạc giữa temp và top rồi mà. top đã chỉ ra 1 trường khác. Giữa nó và temp chỉ là 1 con trỏ nối mà thôi.
    có nghĩa là temp->next == top . Nhưng ra delete temp thì con trỏ next này sẽ trỏ về ? như thế tại sao top lại thay đổi giá trị ...

    Ke ke Hay đấy chứ anh em tớ vừa nảy ra 1 ý tưởng ?

  2. #2
    Ngày gia nhập
    09 2006
    Bài viết
    711

    top khai báo ra sao, CLinkList khai báo và implement ra sao. Code trên không sai, sai ở trên truyền xuống. Cập post rõ code lên.

  3. #3
    Ngày gia nhập
    09 2006
    Bài viết
    20

    theo mình nghĩ như sau
    khi ban khai báo temp là một con trỏ, bạn không hề cấp phát vùng nhớ nào cho temp;
    câu lệnh gán temp = top thì có nghĩa là vùng nhớ của temp và top đã xài chung với nhau, do đó bạn xóa temp thì đã xóa luôn vũng nhớ của top

    để giải quyết vấn đề này bạn phải cấp phát vùng nhớ cho temp đông thời định nghĩa toán tử operator = để gán các giá trị của top cho temp, không được gán vùng nhớ

    mình nghĩ vậy đó

  4. #4
    Ngày gia nhập
    11 2006
    Bài viết
    633

    Sai chính là nằm ở câu lệnh temp = top;
    Nếu ý của cậu là muốn temp->next trỏ đến top thì phải là temp->next = top;
    temp = top có nghĩa là temp và top cùng trỏ đến 1 đối tượng (tham chiếu), tương tác trên temp cũng là tương tác trên top.

  5. #5
    Ngày gia nhập
    07 2006
    Bài viết
    121

    Hì nó giống như vậy nè: Các cậu bán nhà nhưng nhà đó chưa bị đập ấy mà, cậu thích thì cậu cứ vào ở nhưng có thể bị đuổi lúc nào không biết.

    OoShinHaoO

Các đề tài tương tự

  1. cho mình hỏi chút về lập trình C
    Gửi bởi bangbi trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 4
    Bài viết cuối: 04-01-2014, 02:34 AM
  2. Hỏi đáp Cho mình hỏi một chút!
    Gửi bởi dejokuondi trong diễn đàn Ý kiến, đề xuất và khiếu nại
    Trả lời: 5
    Bài viết cuối: 28-10-2011, 07:07 PM
  3. vui chút khí thu các bác
    Gửi bởi kitti trong diễn đàn Giải trí - Thư giãn
    Trả lời: 14
    Bài viết cuối: 18-10-2010, 09:47 PM
  4. Mày để cho nó một chút
    Gửi bởi layrick trong diễn đàn Giải trí - Thư giãn
    Trả lời: 1
    Bài viết cuối: 26-09-2010, 12:05 AM
  5. Cho mình hỏi chút về con trỏ
    Gửi bởi ktwiz trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 16-03-2008, 11:19 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn