Từ 1 tới 8 trên tổng số 8 kết quả

Đề tài: Cấp phát bộ nhớ động trên C, cho mình hỏi vài vấn đề?

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

    Mặc định Cấp phát bộ nhớ động trên C, cho mình hỏi vài vấn đề?

    mình có số row, col là kiểu int
    C Code:
    1. if (!(a=(float*)calloc(row*col,sizeof(float))))
    2.     {
    3.         puts("Khong du bo nho");
    4.         getch();
    5.         exit (1);
    6.     }
    mình muốn hỏi tại sao khi chạy nó lại báo là không đủ bộ nhớ trong khi mình chỉ nhập số row = 200, col=100
    vậy tối đa nó được bao nhiêu và mình muốn hiểu thêm về ý nghĩa của nó ai biết chỉ dùm cái
    Đã được chỉnh sửa lần cuối bởi lethanh : 13-05-2009 lúc 12:59 PM.

  2. #2
    Ngày gia nhập
    03 2008
    Nơi ở
    Hồ chí minh
    Bài viết
    134

    Sao lại cấp phát cho ma trận mà dùng kiểu này hả bạn,bạn thử lấy row*cot là bằng 20000 phần tử kiểu float mà chắc gì trong bộ nhớ có ô nào mà dư hẳn một hàng dài địa chỉ như vậy để bạn lấy.Cho nên nó báo là không đủ bộ nhớ là đúng rồi.
    Every step I'm taking
    Every move I make
    Feels lost with no direction
    My faith is shaking
    But I gotta keep trying.

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

    vậy phải dùng kiểu nào vậy bạn ? cách làm ra sao

  4. #4
    Ngày gia nhập
    03 2008
    Nơi ở
    Hồ chí minh
    Bài viết
    134

    Đây là bài mình code,bạn tham khảo ko hiểu chỗ nào thì cho ý kiến nha.
    C Code:
    1. #include<iostream.h>
    2. #include<conio.h>
    3. #include<stdlib.h>
    4. int **array(int &d,int &c)
    5. {
    6.     int **a;
    7.     a=(int**)calloc(d,sizeof(int));
    8.     if(!a)
    9.     {
    10.         cout<<"khong cap phat duoc:"<<endl;
    11.         return NULL;
    12.     }
    13.     for(int i=0;i<d;i++)
    14.     a[i]=(int*)calloc(c,sizeof(int));
    15.     if(!a[i])
    16.     {
    17.         for(int j=i;j>=0;j--)
    18.             free(a[i]);
    19.         return NULL;
    20.     }
    21.     return a;
    22. }
    23. void input(int **a,int d,int c)
    24. {
    25.     for(int i=0;i<d;i++)
    26.         for(int j=0;j<c;j++)
    27.         {
    28.             cout<<"nhap phan tu thu "<<i+j<<":";
    29.             cin>>*(a[i]+j);
    30.         }
    31. }
    32. void output(int **a,int d,int c)
    33. {  
    34.     for(int i=0;i<d;i++){
    35.         for(int j=0;j<c;j++)
    36.             cout<<" "<<*(a[i]+j);
    37.             cout<<"\n";
    38.     }
    39. }
    40.            
    41.    
    42.  
    43. void main()
    44. {
    45.     int **a,d,c;
    46.     cout<<"nhap so dong cua ma tran:";
    47.     cin>>d;
    48.     cout<<"nhap sp cot cua ma tran:";
    49.     cin>>c;
    50.     a=array(d,c);
    51.     input(a,d,c);
    52.     cout<<"mang sau khi nhap :"<<endl;
    53.     output(a,d,c);
    54.     getch();
    55. }
    Every step I'm taking
    Every move I make
    Feels lost with no direction
    My faith is shaking
    But I gotta keep trying.

  5. #5
    Ngày gia nhập
    09 2006
    Nơi ở
    /usr/share/.hack@
    Bài viết
    1,433

    Trích dẫn Nguyên bản được gửi bởi mori Xem bài viết
    mình có số row, col là kiểu int
    C code: Lựa chọn code | Ẩn/Hiện code
    if (!(a=(float*)calloc(row*col,sizeof(float))))
    &nbsp;&nbsp;&nbsp;&nbsp;{
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;puts("Khong du bo nho");
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getch();
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit (1);
    &nbsp;&nbsp;&nbsp;&nbsp;}



    mình muốn hỏi tại sao khi chạy nó lại báo là không đủ bộ nhớ trong khi mình chỉ nhập số row = 200, col=100
    vậy tối đa nó được bao nhiêu và mình muốn hiểu thêm về ý nghĩa của nó ai biết chỉ dùm cái
    float : 4 bytes
    200 * 100 * 4 = 80000 bytes ~ 80 MB ....
    None!

  6. #6
    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 Cấp phát bộ nhớ động trên C, cho mình hỏi vài vấn đề?

    ủa 80000bytes ~80KB mà...

    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????...

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

    a=(int**)calloc(d,sizeof(int));
    a[i]=(int*)calloc(c,sizeof(int));
    mình không hiểu bạn viết cái này có mục đích là gì ? Đây toàn là code C++
    mình mới học C thôi nên không hiểu rõ lắm.
    Thực ra mình đang làm một bài tập cộng hai ma trận cỡ lớn khoảng 1000*1000 phẩn tử là các số thực. Dữ liệu nhập từ file nhưng chưa nghĩ ra phải làm thế nào được . Bạn nào biết có thể chỉ cho mình chút (Ngôn ngữ C)

  8. #8
    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 mori Xem bài viết
    mình không hiểu bạn viết cái này có mục đích là gì ? Đây toàn là code C++
    mình mới học C thôi nên không hiểu rõ lắm.
    Thực ra mình đang làm một bài tập cộng hai ma trận cỡ lớn khoảng 1000*1000 phẩn tử là các số thực. Dữ liệu nhập từ file nhưng chưa nghĩ ra phải làm thế nào được . Bạn nào biết có thể chỉ cho mình chút (Ngôn ngữ C)
    code C đó, làm gì có C++ ở đâ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 !!!

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

  1. Mảng trên C phát sinh 2 mảng 1 chiều
    Gửi bởi dammelaptrinh trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 3
    Bài viết cuối: 21-12-2011, 12:20 AM
  2. Lập trình C Tai sao i phai la float?
    Gửi bởi kuzun9x trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 3
    Bài viết cuối: 20-10-2011, 09:29 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