Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 6 của 6
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Vấn đề bộ nhớ động khi thoát hàm

    Chào mọi người, mình có vấn đề như sau, mong gỡ rối giùm minh:
    Đại loại mình có 1 lớp có thành phần là động, dùng hàm friend cộng 2 đối tượng a và b của lớp đó, trong hàm friend đó thì có khai báo thêm 1 đối tượng c của lớp đó (để trả về sau khi dùng hàm). Trong hàm friend đó mình có cấp phát động cho thằng c. Hàm hủy thì mình delete thành phần động. Sau khi chạy thì báo lỗi, nếu xóa hàm hủy đi thì chạy bình thường. Như vậy là mình đã mắc lỗi leak memory. Vậy có giải pháp nào vừa nhận được cái trả về, vừa xóa thành phần động đi để khỏi bị lỗi này.
    P/s: Tự nhiên giờ mới để ý đến cái này.

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Mình thì thấy không sử dụng các toán tử tính toán (so sánh thì vẫn để lại) đi là cách hay nhất [IMG]images/smilies/smile.png[/IMG]
    Vì không có cái use-case nào cần đến chúng cả.


    Còn hàm trả về một đối tượng thì sẽ mắc lỗi là new và delete không chung hàm (vì suy cho cùng thì new vẫn được gọi trong hàm).

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    code ví dụ cụ thể đi.

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi prog10
    Mình thì thấy không sử dụng các toán tử tính toán (so sánh thì vẫn để lại) đi là cách hay nhất [IMG]images/smilies/smile.png[/IMG]
    Vì không có cái use-case nào cần đến chúng cả.
    Còn hàm trả về một đối tượng thì sẽ mắc lỗi là new và delete không chung hàm (vì suy cho cùng thì new vẫn được gọi trong hàm).
    Cảm ơn cậu nhiều nhé, nếu cấp phát trong hàm mà hủy ngoài hàm thì có vấn đề gì không cậu?

    - - - Nội dung đã được cập nhật ngày 30-05-2014 lúc 04:15 AM - - -

    Trích dẫn Gửi bởi INTP
    code ví dụ cụ thể đi.
    Thank cậu, code cũng chẳng có gì. Đọc từ 2 file tạo thành 2 mảng, cộng 2 mảng lại rồi xuất ra file mới. Tớ muốn code thế cho đẹp hơn, không đụng chạm gì đến giá trị của 2 mảng trước (dùng hàm bạn, không dùng hàm thành phần).

  5. #5
    Trích dẫn Gửi bởi INTP
    viết toán tử += trước, rồi viết toán tử + sau.
    c = a + b thì trước tiên tạo c copy từ a, sau đó gọi c += b, trả về c là xong.

    vd a là mảng [1,2,3,4], b là mảng [4,3,2,1]
    tạo c copy từ a: [1,2,3,4]
    gọi c += b, c thành mảng [5,5,5,5]
    trả về c.

    nếu mảng ko trùng số phần tử thì c copy từ thằng nào có số phần tử lớn hơn.
    Hay quá, cảm ơn cậu nhiều.

  6. #6
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    viết toán tử += trước, rồi viết toán tử + sau.
    c = a + b thì trước tiên tạo c copy từ a, sau đó gọi c += b, trả về c là xong.

    vd a là mảng [1,2,3,4], b là mảng [4,3,2,1]
    tạo c copy từ a: [1,2,3,4]
    gọi c += b, c thành mảng [5,5,5,5]
    trả về c.

    nếu mảng ko trùng số phần tử thì c copy từ thằng nào có số phần tử lớn hơn.

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •