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

Đề tài: phân biệt 3 hàm free(), delete(), *p=0

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

    Mặc định phân biệt 3 hàm free(), delete(), *p=0

    Mình muốn hỏi phần cấp phát bộ nhớ cho con trỏ.
    Khi muốn giải phóng vùng nhớ con trỏ thì gặp 3 hàm này có ai trả lời cho mình biết công dụng của mỗi hàm ko
    Code:
    int *p;
    free(p);
    delete(p);
    p=0;

  2. #2
    Ngày gia nhập
    07 2007
    Nơi ở
    Sơn La
    Bài viết
    133

    Mình cũng chỉ biết hai hàm free(p) là delete (p) là để xóa hẳn các biển khỏi vùng nhớ thôi.
    Chứ chưa gặp
    p=0;
    này bao giờ.Mà gán như vậy thì làm sao được nhỉ.

    Trích dẫn Nguyên bản được gửi bởi green3r Xem bài viết
    Mình muốn hỏi phần cấp phát bộ nhớ cho con trỏ.
    Khi muốn giải phóng vùng nhớ con trỏ thì gặp 3 hàm này ...
    Cái này bạn đọc ở đâu vậy.
    Ở đó nó nói *p=0;(hoặc p=0) là để giải phóng bộ nhớ à?
    Theo mình thì không phải.
    Có lẽ bạn hiểu lầm ở
    *p=0;
    Vì đây được hiểu là
    *p=10;// giá trị trỏ bởi p = 10

    Không gửi 2 bài liền lúc cùng một đề tài nhé! (Posted by Dreaminess)
    Trao đổi kiến thức sẽ giúp ta tiếp cận nhanh với kiến thức.

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

    Trích dẫn Nguyên bản được gửi bởi green3r Xem bài viết
    Mình muốn hỏi phần cấp phát bộ nhớ cho con trỏ.
    Khi muốn giải phóng vùng nhớ con trỏ thì gặp 3 hàm này có ai trả lời cho mình biết công dụng của mỗi hàm ko
    Code:
    int *p;
    free(p);
    delete(p);
    p=0;
    cả 3 cái bạn nói đều được dùng để giải phóng bộ nhớ cho một con trỏ được cấp phát từ trước.

    thằng delete là một mở rộng thêm của C++;
    thằng free là một thành phần của C;

    2 thằng free và delete không có gì khác nhau về chức năng nhưng mình thường dùng chúng với cặp như sau: dùng delete khi dùng new để cấp phát, và dùng free khi dùng malloc để cấp phát;

    cái thằng delete hay free sau khi thực thi dòng lệnh này rồi thì vẫn dùng được lại biến đó;
    ví như:

    Code:
    	int *p;
    	p = new int;
    	*p = 10;
    	printf("%d",*p);
    	delete p;
    	*p = 100;
    	printf("\nhello\n %d",*p);
    và chương trình của bạn chạy ngọt;

    cái thứ 3 là: p=0;(thằng này tương đương với câu lệnh: p=NULL
    thì cái thằng này người ta ít dùng nó nên nó không thông dụng bằng 2 thằng kia(cái này chưa hiểu vì sao người ta không thích dùng. có lẽ vì truy cập trực tiếp vào bộ nhớ.).
    và nếu viết như trên thì chương trình của bạn sẽ "Đi bán muối" ngay lập tức:
    Code:
    	int *p;
    	p = new int;
    	*p = 10;
    	printf("%d",*p);
    	delete p;
    	*p = 100;
    	printf("\nhello\n %d",*p);
    mà phải cấp phát lại cho *p;
    đoạn code trên viết lại như sau:

    Code:
            int *p;
    	p = new int;
    	*p = 10;
    	printf("%d",*p);
    	p = 0;//=null;
    	p = new int;
    	*p = 100;
    	printf("\nhello\n %d",*p);
            p = 0;
    Đã được chỉnh sửa lần cuối bởi zkday2686 : 17-11-2007 lúc 01:45 AM.

  4. #4
    Ngày gia nhập
    10 2006
    Nơi ở
    In Your Bugs
    Bài viết
    823

    zkDay nói đúng rồi nhưng tớ bổ sung 1 tí nữa.
    Free() và Delete() được sử dụng để hủy vùng nhớ đã cấp phát trước đó.
    Ví dụ:
    int *p;
    p = new int[10];
    cout<<sizeof(p)
    delete(p);
    cout<<sizeof(p);

    cái thằng delete hay free sau khi thực thi dòng lệnh này rồi thì vẫn dùng được lại biến đó;
    Cái này thì không hẳn. Chú ý nhé .

    Người ta có xu hướng dùng delete, free hơn p = null . Đó là vì câu lệnh p=null không giúp giải thoát vùng nhớ mà p đang chiếm giữ. Có nghĩa là vùng nhớ đó sẽ tồn tại suốt cho đến khi chương trình close.

  5. #5
    Ngày gia nhập
    11 2007
    Bài viết
    3

    cảm ơn hai bạn kidkid và zkday2686 mình thử rồi đúng như 2 bạn nói

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

  1. làm sao có thể delete table có id khóa chính đồng thời delete id đó trong table khác
    Gửi bởi thuan trong diễn đàn Thắc mắc Microsoft SQL Server & Microsoft Access
    Trả lời: 3
    Bài viết cuối: 14-10-2011, 10:44 AM
  2. Download Movies Here! Free Movies Collection. Download Free: MovieServe.NET
    Gửi bởi digiman87 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 19-06-2011, 07:57 PM
  3. Free Movie Downloads Sites | Download Free Full Length Movies:MovieServe.Net
    Gửi bởi digiman87 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 30-03-2011, 10:15 AM
  4. Free Movie Downloads- The Best Sites for Free Movies-MovieServe.Net
    Gửi bởi digiman87 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 28-03-2011, 02:17 PM
  5. Cơ chế hoạt động của malloc, new và free, delete như thế nào?
    Gửi bởi ghost_dragonking trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 12
    Bài viết cuối: 19-10-2010, 07:53 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