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ố 17 kết quả

Đề tài: Hàm malloc | Cấp phát bộ nhớ trong C

  1. #1
    Ngày gia nhập
    03 2009
    Nơi ở
    Tứ xứ trên đất sài thành
    Bài viết
    60

    Mặc định Hàm malloc | Cấp phát bộ nhớ trong C

    cho em hỏi về hàm malloc dùng sao? anh em nào có code giải thích càng tốt!!!xin cảm ơn rất nhiều đọc sách rồi nhưng vẫn không hiểu nên lên đây hỏi anh em

  2. #2
    Ngày gia nhập
    08 2008
    Nơi ở
    Liên Bang Nga
    Bài viết
    46

    hàm malloc trong thư viện alloc.h. Nếu gặp khó khăn, bạn cứ việc bấm Ctr + F1 là nó ra hết. Xem hướng dẫn cụ thể trong đó, tin rằng bạn sẽ hiểu
    Code:
    		<ALLOC.H, STDLIB.H>
     Allocates memory
    
     Declaration:  void *malloc(size_t size);
    
     Remarks:
    malloc allocates a block of size bytes from the memory heap. It allows a
    program to allocate memory explicitly as it's needed, and in the exact
    amounts needed.
    
    The heap is used for dynamic allocation of variable-sized blocks of memory.
    Many data structures, such as trees and lists, naturally employ heap memory
    allocation.
    
    All the space between the end of the data segment and the top of the program
    stack is available for use in the small data models, except for a small
    margin immediately before the top of the stack.
    
    This margin is intended to allow the application some room to make the stack
    larger, in addition to a small amount needed by DOS.
    
    In the large data models, all the space beyond the program stack to the end
    of available memory is available for the heap.
    
     Return Value:
     On success, malloc returns a pointer to
        the newly allocated block of memory.
     On error (if not enough space exists for
        the new block), malloc returns null. The
        contents of the block are left unchanged.
     If the argument size == 0, malloc returns
        null.
    
     Example:
    
     #include <stdio.h>
     #include <string.h>
     #include <alloc.h>
     #include <process.h>
    
     int main(void)
     {
        char *str;
    
        /* allocate memory for string */
        if ((str = (char *) malloc(10)) == NULL)
        {
           printf("Not enough memory to allocate buffer\n");
           exit(1);  /* terminate program if out of memory */
        }
    
        /* copy "Hello" into string */
        strcpy(str, "Hello");
    
        /* display string */
        printf("String is %s\n", str);
    
        /* free memory */
        free(str);
    
        return 0;
     }
    Tôi thường thích những cái gì mà tôi không bao giờ có được...

  3. #3
    Ngày gia nhập
    03 2009
    Nơi ở
    Tứ xứ trên đất sài thành
    Bài viết
    60

    bạn chỉ mình bằng tiếng việt đi. mình làm biếng đọc tiếng anh lắm. hihihi. với lại mình không giỏi lắm anh văn. xin cảm ơn ban nhiều.

  4. #4
    Ngày gia nhập
    08 2008
    Nơi ở
    Liên Bang Nga
    Bài viết
    46

    Tôi phân tích cho bạn một cái ví dụ có sẵn vậy
    Code:
    Example:
    
     #include <stdio.h>
     #include <string.h>//cái này cho hàm strcpy();
     #include <alloc.h>//Thư viện cần thiết để chạy malloc()
     #include <process.h>//cái này cho hàm exit();
    
     int main(void)
     {
        char *str;//Con trỏ kiểu char, có thể xem nó như biến kiểu string - chuỗi- trong pascal
    
        /* allocate memory for string 
           Cấp phát bộ nhớ cho chuỗi
        */
        if ((str = (char *) malloc(10)) == NULL)
        /*
           Phân tích dòng trên : chúng ta cần một chuỗi có độ dài là 10, vì thế cần
    phải xin 10 ô nhớ bằng lệnh malloc(10).
           Vì khối nhớ có 10 này sẽ được trỏ đến bởi str, nên chúng ta phải ép kiểu
    trước hàm malloc là (char*)
           Nếu câu lệnh thành công, thì str sẽ là con trỏ đến ô nhớ đầu tiên trong
    khối nhớ 10 ô, nếu không thành công, con trỏ str sẽ có giá trị NULL
        */
        {
           printf("Not enough memory to allocate buffer\n"); //Cấp phát không thành công, thoát chương trình
           exit(1);  /* terminate program if out of memory */
        }
    
        /* copy "Hello" into string */
        strcpy(str, "Hello");//Cấp phát thành công, chúng ta gán chuỗi hello vào khối nhớ kia, tức là vào str, theo đó, str[0] = 'H'
    
        /* display string */
        printf("String is %s\n", str);//Hiển thị kết quả của chuỗi str
    
        /* free memory */
        free(str);//Giải phóng vùng nhớ, tức là không cho str trỏ vào, không quản
    lý nó nữa, mà để cho nó tự do để làm tài nguyên cho các chương trình khác
    
        return 0;
     }
    Tôi thường thích những cái gì mà tôi không bao giờ có được...

  5. #5
    Ngày gia nhập
    03 2009
    Nơi ở
    Tứ xứ trên đất sài thành
    Bài viết
    60

    cho em hỏi anh lienthang chut. em muốn lưu một số >1000 chữ số thì em có dùng được hàm molloc không ah?
    ví dụ:
    Code:
    long *a;
    a=(long*)malloc(100);
    vậy là 400 b được cấp dùng để lưu giá trị trên 1000 chữ số được không hay là chỉ lưu từng giá trị có tối đa là 9 chữ số thồi rồi ghép chúng lại thành số có trên 1000 chữ số. em đang tìm cách in ra số có trên 1000 chữ số. giúp em với. cảm ơn anh liienthanh rất nhiều.

  6. #6
    Ngày gia nhập
    08 2008
    Nơi ở
    Liên Bang Nga
    Bài viết
    46

    Mặc định Hàm malloc | Cấp phát bộ nhớ trong C

    tất nhiên là lấy được, lấy bao nhiêu chẳng được, miễn là không lớn hơn giới hạn bộ nhớ động của nền mà bạn chạy. Ví dụ trong borland hay turbo thì giới hạn bộ nhớ động là 64kb. Nếu muốn lưu số có khoảng 1000 chữ số không nhất thiết cần dùng 1000 ô nhớ, mà có thể giảm số ô nhớ xuống còn 1/4 nhờ một thuật toán be bé
    Tôi thường thích những cái gì mà tôi không bao giờ có được...

  7. #7
    Ngày gia nhập
    03 2009
    Nơi ở
    Tứ xứ trên đất sài thành
    Bài viết
    60

    thuận toán tính trên 1000! là sao hả anh lienthanh. giải thích giùm em thuật toán luôn nhả . tại có người thách em viết được chương trình trên 1000!. cảm ơn anh liênthanh nhiều.!!!

  8. #8
    Ngày gia nhập
    08 2008
    Nơi ở
    Liên Bang Nga
    Bài viết
    46

    Bình thường ta tính toán trong hệ cơ số 10, tức là mỗi ô nhớ chỉ nhớ được một chữ số trong phạm vi từ 0 đến 8. Nếu dùng ô nhớ kiểu short thì mất 2 bytes mà chỉ lưu được 1 chữ số đúng không nào? Giả sử cần lưu số 1 243 thì chúng ta cần đến 4 ô nhớ. Nhưng một ô nhớ kiểu short cũng có thể lưu được giá trị 1 243 này. Vậy chúng ta không tính toán trong hệ cơ số 10 nữa, mà chuyển sang tính toán trong hệ cơ số 1 000, 10 000 ... với một yêu cầu, trong hệ tính của chúng ta, kiểu dữ liệu mà ta định nghĩa còn đủ phạm vi hiệu lực, không bị tràn giới hạn.
    Cách tính toán thì hoàn toàn như trong hệ thập phân, chẳng hạn
    1 234 654
    lấy số này chia lấy dư cho 10 000 được 4654 -> hàng đơn vị trong hệ 10 000
    lấy số này chia modul cho 10 000 được 0123 -> hàng chục trong hệ 10 000
    vậy số này trong hệ 10 000 là một số có hai chữ số, cần 2 ô nhớ, ô nhớ thứ nhất là để chứa hàng đơn vị, tức là arr[0]=4654, ô nhớ thứ hai để chứa giá trị hàng đơn vị arr[1]=123
    Tôi thường thích những cái gì mà tôi không bao giờ có được...

  9. #9
    Ngày gia nhập
    03 2009
    Nơi ở
    Tứ xứ trên đất sài thành
    Bài viết
    60

    cảm iơn anh lienthang nhiều cũng hơi hiểu rồi. hihi. cảm ơn anh đã truyền dạy võ công cho sư đệ.đa tạ!!!hihi.

    Càng Học Càng Ngu!!!Kiến thức thì vô tận con người thì vô biên thời gian thì vô đối????...

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

    Hay thật...!

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

  1. Hàm malloc trong C
    Gửi bởi thaohoangf trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 04-12-2012, 07:34 AM
  2. Kỹ thuật C Hàm free trong malloc.h...
    Gửi bởi lytieubinh_269 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 1
    Bài viết cuối: 20-11-2011, 02:33 PM
  3. Kỹ thuật C Sử dụng hàm malloc trong stdlib.h?
    Gửi bởi icanfeel trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 4
    Bài viết cuối: 26-03-2011, 07:11 AM
  4. Phân biệt hàm malloc và thư viện malloc.h
    Gửi bởi nguyenthanhhai90vp trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 16-09-2010, 11:34 AM
  5. Lỗi bộ nhớ free malloc trong VC++
    Gửi bởi trần trân trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 1
    Bài viết cuối: 28-12-2009, 12:57 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