Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 11 kết quả

Đề tài: Cấp phát động trong C++

  1. #1
    Ngày gia nhập
    03 2009
    Bài viết
    13

    Mặc định Cấp phát động trong C++

    Mọi người cho hỏi nếu có chương trình thế này thì phần bộ nhớ được cấp phát bởi new char[13] dưới có bị hủy khi ra khỏi hàm hay không? Rồi sau đó nếu dùng lệnh strcpy(Text, "123456789") có được hay không?

    C++ Code:
    1. #include <iostream>
    2. #include <string.h>
    3.  
    4. using namespace std;
    5. char *Text;
    6.  
    7. void test()
    8. {
    9.     char *a;
    10.  
    11.     a = new char[13];
    12.     strcpy(a, "abcdefgh");
    13.     Text = a;
    14. }
    15.  
    16. int main()
    17. {
    18.     test();
    19.     cout << Text << endl;  
    20.     strcpy(Text, "123456789");
    21.     cout << Text << endl;
    22.     delete[] Text;
    23.     return 0;
    24. }

  2. #2
    Ngày gia nhập
    11 2008
    Bài viết
    186

    sau khi gọi hàm thì a không bị hủy; khi kết thúc chương trình a bị hủy
    Ước mơ vươn tới Linux Developer.
    Đang trong quá trình tập luyện:
    1. C system programming
    2. GNU distribution
    3. Gtk+/Gnome Application Programming.

    Bác nào giỏi lĩnh vực này giúp Kim với nha. Kim cám ơn nhiều !!!

  3. #3
    Ngày gia nhập
    03 2009
    Bài viết
    13

    Thanks, thế còn chương trình sau có hoạt động không?
    C++ Code:
    1. #include <iostream>
    2. using namespace std;
    3.  
    4. int main()
    5. {
    6. char *abc;
    7. abc = new char[3];
    8. delete (&abc[0]);
    9. delete (&abc[1]);
    10. delete (&abc[2]);
    11. return 0;
    12. }

  4. #4
    Ngày gia nhập
    04 2007
    Bài viết
    134

    Dùng vậy là sai.
    Còn hoạt động ko thì ko biết dc, nếu có cũng chạy sai )

  5. #5
    Ngày gia nhập
    03 2009
    Bài viết
    13

    Nếu sửa lại thế này thì sao??

    C++ Code:
    1. #include <stdio.h>
    2.  
    3. int main()
    4. {
    5. char *abc;
    6. abc = (char*) malloc(sizeof(char)*3);
    7. free (&abc[0]);
    8. free (&abc[1]);
    9. free (&abc[2]);
    10. return 0;
    11. }
    Chương trình có chạy đúng không vậy bạn?

  6. #6
    Ngày gia nhập
    11 2008
    Bài viết
    186

    Mặc định Cấp phát động trong C++

    bó tay
    so sánh 2 kiểu cấp phát: stack (C) với heap (C++)...rỗi hơi
    mong bạn đọc cấu trúc dữ liệu của Stack và Heap.
    khuyên chân thành.
    Ước mơ vươn tới Linux Developer.
    Đang trong quá trình tập luyện:
    1. C system programming
    2. GNU distribution
    3. Gtk+/Gnome Application Programming.

    Bác nào giỏi lĩnh vực này giúp Kim với nha. Kim cám ơn nhiều !!!

  7. #7
    Ngày gia nhập
    04 2007
    Bài viết
    134

    C hay C++ gì thì cấp phát động cũng trên heap hết.

    Trích dẫn Nguyên bản được gửi bởi learnC Xem bài viết
    Nếu sửa lại thế này thì sao??
    C++ Code:
    1. #include <stdio.h>
    2. int main()
    3. {
    4. char *abc;
    5. abc = (char*) malloc(sizeof(char)*3);
    6. free (&abc[0]);
    7. free (&abc[1]);
    8. free (&abc[2]);
    9. return 0;
    10. }
    Chương trình có chạy đúng không vậy bạn?
    Cũng sai chứ có khác gì hồi nãy đâu.
    Tham số cho delete và free phải là con trỏ trước đó trả về bởi new và malloc. Chứ ko phải lấy đại con trỏ nào quăng cho nó cũng dc

  8. #8
    Ngày gia nhập
    05 2009
    Nơi ở
    TPHCM
    Bài viết
    12

    Mấy ông này chơi "Chiêu" nè !

  9. #9
    Ngày gia nhập
    11 2008
    Bài viết
    186

    Trích dẫn Nguyên bản được gửi bởi Lugia Xem bài viết
    C hay C++ gì thì cấp phát động cũng trên heap hết.


    Cũng sai chứ có khác gì hồi nãy đâu.
    Tham số cho delete và free phải là con trỏ trước đó trả về bởi new và malloc. Chứ ko phải lấy đại con trỏ nào quăng cho nó cũng dc
    C: malloc, free => stack-based memory allocation
    C++: new, delete => heap-based memory allocation

    mời bạn tham khảo:
    http://en.wikipedia.org/wiki/Dynamic_memory_allocation
    http://en.wikipedia.org/wiki/Heap-ba...ory_allocation
    http://en.wikipedia.org/wiki/Malloc
    http://en.wikipedia.org/wiki/New_(C%2B%2B)
    Ước mơ vươn tới Linux Developer.
    Đang trong quá trình tập luyện:
    1. C system programming
    2. GNU distribution
    3. Gtk+/Gnome Application Programming.

    Bác nào giỏi lĩnh vực này giúp Kim với nha. Kim cám ơn nhiều !!!

  10. #10
    Ngày gia nhập
    04 2007
    Bài viết
    134

    Ặc, cấp phát động phải nằm trên heap, làm sao có thể nằm trên stack dc. (Nếu nằm trên stack thì ra khỏi hàm sẽ bị pop mất tiêu à)
    Stack-based memory allocation là chỉ việc allocate memory cho các biến cục bộ. Bạn nên tự tham khảo lại mấy cái link của mình đê
    Đã được chỉnh sửa lần cuối bởi Lugia : 17-05-2009 lúc 09:23 PM.

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