Hiển thị kết quả từ 1 đến 10 / 10
  1. #1
    Tham gia
    16-10-2002
    Location
    Far away a distant star
    Bài viết
    109
    Like
    0
    Thanked 0 Times in 0 Posts

    Hỏi về hàm malloc() trong C ?

    Hi,
    Mình muốn biết tác dụng và ý nghĩa của hàm malloc () trong C ? Nếu có ví dụ thỉ thật tuyệt.
    Xin cám ơn.
    Quote Quote

  2. #2
    ken Guest
    Hàm malloc() trong C dùng để cấp phát bộ nhớ động, nói nôm na là cấp vùng nhớ để con trỏ chỉ tới mà mình không biết rõ vùng nhớ này sẽ thay đổi thế nào trong chương trình, ngươc với malloc() là hàm free() ... mình khuyên bạn không nên dùng 2 hàm này mà nên dùng hàm new() và delete() trong C++ thì tốt hơn mà chức năng cũng tương tự

  3. #3
    Tham gia
    30-03-2003
    Location
    HCMC
    Bài viết
    233
    Like
    0
    Thanked 0 Times in 0 Posts
    Hàm malloc dùng để cấp phát bộ nhớ động trong C, trong C++ cũng dùng được nhưng không nên.
    ví dụ:

    char *buffer; //khai báo vùng đệm
    buffer = (char *)malloc(1024); //cấp phát 1024 bytes
    if(buffer == NULL) {
    //xử lý nếu thất bại
    } else {
    //xử lý nếu thành công
    }
    free(buffer); //sau khi sử dụng xong, giải phóng bộ nhớ
    //đã cấp phát


  4. #4
    Tham gia
    18-05-2003
    Location
    Seattle
    Bài viết
    12
    Like
    0
    Thanked 2 Times in 2 Posts

    Thêm một chút

    malloc (memory allocate)

    Chức năng giống như new trong C++. Nhưng vì C không hoàn toàn là một object oriented language, bạn chỉ có thể dùng malloc để allocate memory at run time. Không như trong C++ bạn có thể dùng keyword new.

    Lúc bạn dùng malloc, chương trình của bạn sẽ allocate một khoảng memory ở trong heap để dùng. Nó không nằm trong program's variables stack. Do đó sau khi dùng xong, bạn phải free nó, nếu không, chương trình của bạn sẽ bị gọi là có memory leak. Cũng như delete trong C++ vậy.

    malloc nên dùng chung với sizeof.

    Ví dụ bạn có một cái struct
    Code:
    typedef struct {
       int id;
       char name[20];
    } person;
    Giả sử như at run time, bạn muốn allocate memory để lưu person thì làm sao bạn biết phải allocate bao nhiêu memory cho đủ? Không lý bạn phải ngồi tính coi int là bao nhiêu bytes, character array có 20 elements là bao nhiêu bytes? Nếu cái struct của bạn phức tạp hơn thì sao? Đây là lúc bạn cần dùng sizeof. Đây là cách bạn allocate memory cho person
    Code:
    person* NguoiVietTaiSeattle;
    
    NguoiVietTaiSeattle = (person*) malloc (sizeof (person));
    ...
    NguoiVietTaiSeattle->id=10;
    free(NguoiVietTaiSeattle);
    Nếu bạn muốn allocate memory để lưu ví dụ 5 persons thì bạn phải dùng calloc.
    Code:
    NguoiVietTaiSeattle = (person*) calloc (5, sizeof (person));

  5. Thành viên Like bài viết này:


  6. #5
    Tham gia
    16-10-2002
    Location
    Far away a distant star
    Bài viết
    109
    Like
    0
    Thanked 0 Times in 0 Posts
    Như vậy có phải đối với tất cả các variables (nói chung) , trừ các primary variables (char, int ), đều phải dùng malloc() để allocate memory trước khi dùng variable đó ?
    Cám ơn các bạn.

  7. #6
    Tham gia
    30-03-2003
    Location
    HCMC
    Bài viết
    233
    Like
    0
    Thanked 0 Times in 0 Posts
    Khi bạn khai biến con trỏ thì hầu như là phải cấp phát bộ nhớ trước khi sử dụng trừ trường hợp cho nó trỏ đến vùng nhớ định trước.
    Vd:
    char *video_mem = MK_FP(0xA000,0x0000); // Không phai cấp phát
    char *buffer; //Cần cấp phát trrước khi sử dụng

  8. #7
    Tham gia
    18-05-2003
    Location
    Seattle
    Bài viết
    12
    Like
    0
    Thanked 2 Times in 2 Posts
    Bài viết được gửi bởi Kamate
    Như vậy có phải đối với tất cả các variables (nói chung) , trừ các primary variables (char, int ), đều phải dùng malloc() để allocate memory trước khi dùng variable đó ?
    Cũng còn tùy theo bạn muốn dùng nó để làm gì. Nếu bạn có variables thuộc loại pointer và muốn nó có memory space riêng thì dùng malloc để allocate memory cho nó. Nhiều khi bạn declare một variable thuộc loại pointer chỉ để thao tác giá trị của các variables khác.
    Code:
    int i = 5;
    int* pi = &i;
    
    *pi = 10;
    printf ("%d", *pi); // sẽ hiển thị 10
    i = 7;
    printf ("%d", *pi); // sẽ hiển thị 7

  9. #8
    Tham gia
    19-09-2008
    Bài viết
    3
    Like
    0
    Thanked 0 Times in 0 Posts
    cam on nhe. hehehehehehehheheheheheheheh

    [=========> Bổ sung bài viết <=========]

    cam on nhiu uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
    Được sửa bởi hanph lúc 17:12 ngày 11-02-2009 Reason: Bổ sung bài viết

  10. #9
    Tham gia
    14-10-2007
    Bài viết
    4
    Like
    0
    Thanked 0 Times in 0 Posts
    Vậy mình có cần kiểm tra nó có null hay ko trc khi free ko vậy :s

  11. #10
    Tham gia
    08-10-2009
    Bài viết
    5
    Like
    0
    Thanked 0 Times in 0 Posts
    bài viết hay !

    free thì ko cần kiểm tra đâu!

    (mybrian tao mày đồng môn thì phải )

Bookmarks

Quy định

  • Bạn không thể tạo chủ đề mới
  • Bạn không thể trả lời bài viết
  • 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
  •