Công cụ bảo vệ mã nguồn .NET mạnh nhất, không thể unpack, miễn phí cho các khách hàng đầu tiên đăng ký.
Từ 1 tới 2 trên tổng số 2 kết quả

Đề tài: kiểm tra con trỏ trước khi xóa bằng hàm delete

  1. #1
    Ngày gia nhập
    05 2013
    Bài viết
    16

    Unhappy kiểm tra con trỏ trước khi xóa bằng hàm delete

    Chào các PRO!
    mình có câu hỏi cần giải đáp giúp
    Khi mình khởi tạo 1 con trỏ và gán các giá trị vào nó
    sau thời gian không cần đến con trỏ này mình tiến hành delete nó để giải phóng ram
    Đây là quá trình vòng lặp khởi tạo rồi xóa nhiều lần
    mình ví dụ tạo con trỏ
    int functionA(){
    int *abc = new int;
    abc = xyz;
    if(abc){
    delete abc;
    abc = 0;
    }

    }
    ví dụ cái funtionA này nó thực hiện đi thực hiện lại nhiều lần
    tuy nhiên sau thời gian dài dẫn đến tình trạng hàm delete bị crash
    mặc dù abc = 0 thì không được xóa biến abc tuy nhiên khi chạy chương trình thời gian thì biến này = NULL mà vẫn tiếp tục dùng hàm delete và sụp đổ hệ thống ở hàm delete này.
    Các pro cho hỏi vì sao xảy ra lỗi này
    cách nào khắc phục và check biến con trỏ để khi nó đã = 0 rồi thì không thể delete gây sập chương trình nữa
    Cảm ơn các Pro đã đọc
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.

  2. #2
    Ngày gia nhập
    02 2014
    Nơi ở
    TP.HCM
    Bài viết
    904

    Vấn đề của bạn không phải ở khối lệnh if mà ở câu lệnh gán abc = xyz; Bạn đã cấp phát con trỏ rồi cho nó chỉ tới nơi khác, hệ quả là lệnh delete làm cho hệ thống thu hồi vùng nhớ không hợp lệ dẫn tới sụp đổ. Thay lệnh trên : *abc = (int)<something>;
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.

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