Trang 1 trên tổng số 3 123 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 26 kết quả

Đề tài: Một số vấn đề về con trỏ và cấp phát bộ nhớ

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

    Mặc định Một số vấn đề về con trỏ và cấp phát bộ nhớ

    1)khi khai báo
    Code:
    int n
    thì hệ điều hành sẽ cấp phát vùng nhớ như thế nào cho n ?khi cấp phát bộ nhớ bằng malloc,alloc,new thì hệ điều hành sẽ cấp phát vùng nhớ như thế nào ?
    2)
    khi dùng lệnh free hoặc delete thì xuất hiện lỗi này ai giúp giùm cách sửa với :((
    3)
    Code:
    p->~int();
    câu lệnh này có nghĩa gì ?

  2. #2
    Ngày gia nhập
    10 2011
    Bài viết
    552

    Vùng nhớ ở Heap, (dc cấp nhờ toán tử new hoặc phép malloc) thì mới free, delete được.
    Còn mấy cái vùng nhớ tĩnh kia ở Data Segment, tự giải phóng khi out ra khỏi hàm. Không cần và không được giải phóng
    p->~int();
    Cái này sau này học lập trình hướng đối tượng trên C++ rồi hiểu, giờ ko cần hiểu
    Um Mani Padme Hum...!!

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

    Trích dẫn Nguyên bản được gửi bởi clchicken Xem bài viết
    Cái này sau này học lập trình hướng đối tượng trên C++ rồi hiểu, giờ ko cần hiểu
    híc bạn ơi đâu phải chuyện gì trường cũng dạy đâu bạn ngay cả con trỏ mà lớp tôi đứa biết đứa không.Nếu trường có dạy thì mình đâu cần phải lên đây luôn đâu.
    Trích dẫn Nguyên bản được gửi bởi clchicken Xem bài viết
    Vùng nhớ ở Heap, (dc cấp nhờ toán tử new hoặc phép malloc) thì mới free, delete được.
    Còn mấy cái vùng nhớ tĩnh kia ở Data Segment, tự giải phóng khi out ra khỏi hàm. Không cần và không được giải phóng
    _làm sao biết vùng nhớ ở Heap hay ở Data Segment.
    _Còn câu 1 nữa khi
    Code:
    int n
    thì hệ điều hành sẽ tìm những vùng nhớ liên tục nếu không tìm thấy thì báo memory error,còn khi dùng malloc,alloc,new thì hệ điều hành sẽ tìm từng ô nhớ rồi ghép lại sao cho đủ thì thôi.Như vậy có đúng không ?

  4. #4
    Ngày gia nhập
    10 2011
    Bài viết
    552

    Thì tôi đã nói rồi.
    Cái gì mà dc new , malloc , alloc ra thì nó ở Heap .
    Còn ngoài ra thì nó ở vùng kia.
    Tôi đã có nói trong bài trên rồi mà sao ko chịu đọc cho kĩ, đọc cứ lướt lướt thế thì làm sao nắm thông tin

    thì hệ điều hành sẽ tìm những vùng nhớ liên tục nếu không tìm thấy thì báo memory error,còn khi dùng malloc,alloc,new thì hệ điều hành sẽ tìm từng ô nhớ rồi ghép lại sao cho đủ thì thôi.Như vậy có đúng không ?
    Xem ra cũng có vẻ muốn tìm hiểu kỹ rồi nhỉ. Vậy thì ngại gì đọc đúng không ? Chỉ cho bài để đọc
    Tìm bài viết: "Bản chất con trỏ" của tác giả -langman
    Um Mani Padme Hum...!!

  5. #5
    Ngày gia nhập
    07 2010
    Nơi ở
    chỗ kín
    Bài viết
    446

    cha này dùng cả free cả new, khiếp thật

  6. #6
    Ngày gia nhập
    11 2010
    Nơi ở
    Black Hole
    Bài viết
    824

    Mặc định Một số vấn đề về con trỏ và cấp phát bộ nhớ

    5 dòng đầu tiên trong ham main() của bạn có ý nghĩa gì vây ? Đặc biệt là dòng thứ 5.
    Đọc lại thật chậm lý thuyết xem sao.
    Come as guest...... stay as family......... because we're smiling together.

  7. #7
    Ngày gia nhập
    09 2011
    Bài viết
    16

    Trích dẫn Nguyên bản được gửi bởi pkthanh92 Xem bài viết
    cha này dùng cả free cả new, khiếp thật
    ẹc cái ở trên chỉ là 1 hàm khác thôi còn trong main không có đụng hàm đó )
    5 dòng đầu tiên trong ham main() của bạn có ý nghĩa gì vây ? Đặc biệt là dòng thứ 5.
    Đọc lại thật chậm lý thuyết xem sao.
    __________________
    tui đang kiểm tra xem sau khi free hoặc delete thì giá trị con trỏ a trỏ tới có bị thay đổi hay không .Vì trên lớp thì được dạy là sẽ thay đổi lúc trước khi free hoặc delete thì cũng thay đổi nhưng lúc lên 4rum này đọc thì lại bảo không thay đổi =.=.Nên tính kiểm tra lại ai ngờ lại bị lỗi :(.
    Đã được chỉnh sửa lần cuối bởi vipzero : 25-02-2012 lúc 11:03 AM.

  8. #8
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Trích dẫn Nguyên bản được gửi bởi vipzero Xem bài viết
    ẹc cái ở trên chỉ là 1 hàm khác thôi còn trong main không có đụng hàm đó )

    tui đang kiểm tra xem sau khi free hoặc delete thì giá trị con trỏ a trỏ tới có bị thay đổi hay không .Vì trên lớp thì được dạy là sẽ thay đổi lúc trước khi free hoặc delete thì cũng thay đổi nhưng lúc lên 4rum này đọc thì lại bảo không thay đổi =.=.Nên tính kiểm tra lại ai ngờ lại bị lỗi :(.
    Ko biết từ đâu ra mà một số bạn cứ cho rằng free, delete là xóa mất vùng nhớ đã cấp phát. Cấp phát là quá trình trao quyền sở hữu và free, delete là lấy lại quyền sở hữu. Giống như bạn ( con trỏ ) đi thuê căn nhà ( cấp phát ), bạn dĩ nhiên sẽ biết được địa chỉ căn nhà cần thuê. Trong suốt thời gian thuê, bạn được quyền sử dụng căn nhà đó. Khi hết hợp đồng, bạn trả nhà ( free, delete ), tức là bạn ko còn quyền sử dụng căn nhà đó nữa. Căn nhà thì vẫn còn nguyên đấy, ko ai lại đập phá nó đi cả. Địa chỉ căn nhà đó dĩ nhiên là bạn ( con trỏ ) vẫn biết, nhưng bạn ko có quyền xài nó nữa. Nếu bạn vẫn cố ý xài ( truy xuất, hoặc free/delete 1 lần nữa ) khi ko còn được phép thì điều đó là phạm pháp ( gây crash chương trình ). Bản chất con trỏ và cấp phát chỉ có như thế mà thôi.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  9. #9
    Ngày gia nhập
    10 2011
    Bài viết
    552

    tui đang kiểm tra xem sau khi free hoặc delete thì giá trị con trỏ a trỏ tới có bị thay đổi hay không .Vì trên lớp thì được dạy là sẽ thay đổi lúc trước khi free hoặc delete thì cũng thay đổi nhưng lúc lên 4rum này đọc thì lại bảo không thay đổi =.=.Nên tính kiểm tra lại ai ngờ lại bị lỗi :(.
    Nên hiểu chúng nó làm nhiệm vụ GIẢI PHÓNG, chứ ko phải là HỦY. Trao trả lại Giấy phép SỬ DỤNG ĐẤT.
    Thuê đất rồi xây nhà lên ở, ở xong ko dùng nữa, bị chính phủ tịch thu. Thì cái nhà còn đó, ngay trên mảnh đất đó. Bạn ko dc quyền dùng nó nữa. Và giờ cái miếng đất (Có bao gồm cái nhà đã xây trên đó) sau này sẽ đc chuyển cho ai đó sở hữu, còn người sở hữu mới có muốn Đập nhà đi xây lại ko là quyền của họ.
    Um Mani Padme Hum...!!

  10. #10
    Ngày gia nhập
    10 2010
    Bài viết
    177

    Tôi nghĩ cậu nên đọc bài này:

    http://diendan.congdongcviet.com/showthread.php?t=42977

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