Announcement

Collapse
No announcement yet.

Leak bộ nhớ trong C++

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • [C++] Leak bộ nhớ trong C++

    Chào thầy các bạn, hiện tại mình đang có 1 thắc mắc khi đọc về lỗi leak bộ nhớ trong c++ nhưng không hiểu được ví dụ mà tài liệu dẫn như sau:
    Code:
    void f(int n)
    {
    int* p1 = new int[n];
    unique_ptr<int[]> p2 {new int[n]};
    //...
    ì(n%2) throw runtime_error("odd");
    delete[] p1;
    }
    trong ví dụ trên, khi cho n=3 (số lẻ) thì xảy ra leak bộ nhớ ở p1, còn p2 thì không vấn đề gì.
    Ai có thể giải thích giùm mình không?

  • #2
    Originally posted by 10520173 View Post
    Chào thầy các bạn, hiện tại mình đang có 1 thắc mắc khi đọc về lỗi leak bộ nhớ trong c++ nhưng không hiểu được ví dụ mà tài liệu dẫn như sau:
    Code:
    void f(int n)
    {
    int* p1 = new int[n];
    unique_ptr<int[]> p2 {new int[n]};
    //...
    ì(n%2) throw runtime_error("odd");
    delete[] p1;
    }
    trong ví dụ trên, khi cho n=3 (số lẻ) thì xảy ra leak bộ nhớ ở p1, còn p2 thì không vấn đề gì.
    Ai có thể giải thích giùm mình không?
    Thì hàm f của bạn cấp phát 1 vùng nhớ n phần tử kiểu int ( p1 )
    Khi gặp n lẻ thì điều kiện if(n%2) ( Nếu n chiaw không hết cho 2 ) thì văng exception ,
    như vậy đoạn code giải phóng bộ nhớ đã cấp phát cho p1 delete[] p1; (unreachable) không đc thực thi --> suy ra mất dấu , không thể giải phóng cho p1 đc nữa , mặc dù hết hàm f , nó đã không còn đc xài nữa.

    Còn p2 không bị là bỏi vì nó là tự động quản lý, nhận biết giải phóng vùng nhớ khi không còn xài nữa ( muốn rõ cơ chế nó thì cplusplus.com đọc thêm )

    Im a british accent lover

    Comment

    LHQC

    Collapse
    Working...
    X