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

Đề tài: cấp phát bộ nhớ trong vòng for như thế nào

  1. #1
    Ngày gia nhập
    12 2012
    Bài viết
    0

    Angry cấp phát bộ nhớ trong vòng for như thế nào

    Mình không biết có cái kiểu cấp phát bộ nhớ theo kiểu mà chưa biết bao nhiêu phần tử không,
    Ý mình là thế này:
    Lúc đầu cho n=0;
    Mình muốn chuyển một phần tử vào mảng con trỏ *p, nhưng mình không biết mình sẽ cho vào bao nhiêu,
    cứ mỗi lần mình đánh một số là nó bộ nhớ tắn n+1;
    vào p=(int*)calloc(n+1;sizeof(int));
    Không biết có đúng không
    Mọi người cho ý kiến.
    Mới tìm hiểu con trỏ mà không thấy bài viết này trong CDC.

  2. #2
    Ngày gia nhập
    02 2010
    Bài viết
    113

    Trích dẫn Nguyên bản được gửi bởi letung94 Xem bài viết
    Mình không biết có cái kiểu cấp phát bộ nhớ theo kiểu mà chưa biết bao nhiêu phần tử không,
    Ý mình là thế này:
    Lúc đầu cho n=0;
    Mình muốn chuyển một phần tử vào mảng con trỏ *p, nhưng mình không biết mình sẽ cho vào bao nhiêu,
    cứ mỗi lần mình đánh một số là nó bộ nhớ tắn n+1;
    vào p=(int*)calloc(n+1;sizeof(int));
    Không biết có đúng không
    Mọi người cho ý kiến.
    Mới tìm hiểu con trỏ mà không thấy bài viết này trong CDC.
    tại sao trong vòng for không cho 1 biến đếm rồi sau đó cấp phát bộ nhớ đó theo biến đếm đó nhỉ????

  3. #3
    Ngày gia nhập
    01 2013
    Bài viết
    1,477

    Đầu tiên xin cấp phát 1 vùng nhớ size k, sau đó nếu không đủ thì giải phóng vùng nhớ cũ rồi xin cấp phát 1 vùng nhớ gấp đôi vùng nhớ cũ, cho đến khi hết dữ liệu hoặc bị lỗi thì dừng.

  4. #4
    Ngày gia nhập
    12 2012
    Bài viết
    0

    tại sao trong vòng for không cho 1 biến đếm rồi sau đó cấp phát bộ nhớ đó theo biến đếm đó nhỉ????
    Thì ý của tới là chạy vòng for đó, hiểu ngầm thế thôi, mà không biết cấp phát thế nào
    prog10
    nói chưa hiểu lắm, cụ thể hơn tí được không

  5. #5
    Ngày gia nhập
    01 2013
    Bài viết
    1,477

    Ví dụ với int:
    Code:
    void* capPhat(int n,int sz)
    {
       void *p=malloc(n*sz);
       if(p==NULL)
       {
            printf("Out of memory"); getche(); exit(-1);
       }
       return p;
    }
    void gc(int* p)
    {
       if(p!=NULL) free(p); else { printf("Free what?"); getche(); exit(-1); }
    }
    void* nhap(int *n)
    {
       *n=0;
       const int k=32; /* không dùng define khi không cần thiết */
       int *p, *p1; int t=0x7fffffff; int sz=k;
       int i;
       printf("Nhap so nguyen, ket thuc bang so am: ");
       p=capPhat(sz,4); int *n=0;
       do {
           for (i=0; i<sz && t>=0; ++i)
                { scanf("%d",&t); p[i+*n]=t; }
           if(t<0) break; else {p1=capPhat(sz*2,4); memcpy(p1,p,sz*4); gc(p); p=p1; *n=sz; sz*=2;}
       }
       *n+=i+1;
       return p;
    }
    Đã được chỉnh sửa lần cuối bởi prog10 : 22-01-2013 lúc 02:44 AM.

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

    Mặc định cấp phát bộ nhớ trong vòng for như thế nào

    Bài của bạn mình thấy thế nào ý nó là kiểu int dùng void làm gì, thường dùng kiểu void thường sẽ phải ép kiểu khi dùng
    C Code:
    1. void* capPhat(int n,int sz)
    2. {
    3.    void *p=malloc(n*sz);//chỗ này bạn muốn khai báo n*sz byte cơ à, mình tường n*sizeof(int)
    4.    if(p==NULL)
    5.    {
    6.         printf("Out of memory"); getche(); exit(-1);
    7.    }
    8.    return p;
    9. }
    10. void gc(int* p)
    11. {
    12.    if(p!=NULL) free(p); else { printf("Free what?"); getche(); exit(-1); }
    13. }
    14. void* nhap(int *n)
    15. {
    16.    *n=0;
    17.    const int k=32; /* không dùng define khi không cần thiết */
    18.    int *p, *p1; int t=0x7fffffff; int sz=k;
    19.    int i;
    20.    printf("Nhap so nguyen, ket thuc bang so am: ");
    21.    p=capPhat(sz,4); int *n=0;//cho này không ép kiểu chạy sao được không thể convert void về int
    22.    do {
    23.        for (i=0; i<sz && t>=0; ++i)
    24.             { scanf("%d",&t); p[i+*n]=t; }
    25.        if(t<0) break; else {p1=capPhat(sz*2,4); memcpy(p1,p,sz*4); gc(p); p=p1; *n=sz; sz*=2;}
    26.    }
    27.    *n+=i+1;
    28.    return p;
    29. }
    Giao lưu và học hỏi
    https://www.facebook.com/kimcy1992

  7. #7
    Ngày gia nhập
    01 2013
    Bài viết
    1,477

    Hàm malloc cũng trả về void* cho linh hoạt mà bạn.
    Còn chuyện quên ép kiểu thì quả là thiếu sót thật.

  8. #8
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,007

    Không phải tớ ném đá các bạn đâu cơ mà dạo này nghiên cứu về chuẩn thấy như này :

    if(p==NULL)
    {
    printf("Out of memory"); getche(); exit(-1);
    }

    đối với code chuẩn, khi gặp lỗi trong 1 hàm như này chả ai lại
    + printf vì cái này đưa ra luồng dữ liệu chuẩn:
    thế người ta làm thế nào ? đó là đưa ra luồng err, rồi ứng với mỗi trường hợp cụ thể, tôi gán luồng err vào đâu
    ví dụ làm điện thoại thì tôi mở 1 file trên thẻ nhớ, gán luồng vào đó, rồi cho out ra, để đọc log bug
    ví dụ với bo mạch nào đó, tôi co luồng out ra gắn với cổng usb theo định dạng nào đó, hoặc là 1 cái màn hình nhỏ nhỏ gắn để debug, rồi cho out ra luồng đó,
    C++ Code:
    1. #include <iostream>
    2. using namespace std;
    3. #include <conio.h>
    4.  
    5. void main(void)
    6. {
    7.     //............
    8.     fprintf(stderr,"co bug ");
    9.  
    10.     //....
    11.     cerr<<"co bug";
    12.    
    13.     getch();
    14. }



    + chả ai lại cho malloc ko được exit cái phịc 1 cái ra thế cả. thường malloc ko được trả về null
    còn xử lý thế nào thì ....


    P/S: Nếu đọc các framework kinh điển cuả người nhật hoặc của thế giới đều thấy như thế!
    ví dụ : HTS Engine API
    ^_,^

    Facebook : https://www.facebook.com/langmaninternet

    Bùi Tấn Quang

  9. #9
    Ngày gia nhập
    04 2010
    Nơi ở
    Binh Thanh, Hồ Chí Minh, Vietnam, Vietnam
    Bài viết
    504

    ^
    Đã lỡ nói thì nói cho hết luôn đi anh ạ. Làm thế nào để gán vào luồn err? VD ghi vào một tệp tin chẳng hạn?
    Kết bạn với tôi <3
    Skype: giautm
    Facebook:
    https://fb.com/giautm.duongntt
    Email:
    giau.tmg@gmail.com

  10. #10
    Ngày gia nhập
    12 2012
    Bài viết
    0

    Chưa hiểu lắm mấy members ơi

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

  1. Cách sử dụng vòng lặp for trong C# như thế nào?
    Gửi bởi donkihote89 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 13
    Bài viết cuối: 03-08-2013, 10:36 AM
  2. Bài tập C thắc mắc trong vòng lặp
    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-01-2013, 03:35 PM
  3. Sử dụng vòng lặp while trong sql như thế nào?
    Gửi bởi Riku trong diễn đàn Thắc mắc Microsoft SQL Server & Microsoft Access
    Trả lời: 2
    Bài viết cuối: 16-12-2011, 04:10 PM
  4. Thắc mắc về vòng lặp trong C#
    Gửi bởi mr_niit trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 1
    Bài viết cuối: 03-07-2010, 08:23 AM
  5. Thắc mắc vòng lặp trong C
    Gửi bởi AnhLaNo1 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 9
    Bài viết cuối: 18-04-2010, 11:31 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