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

Đề tài: Vấn đề với kích thước lớn !

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

    Mặc định Vấn đề với kích thước lớn !

    Hic ! Xin lỗi bác Mod, tại thành viên mới chưa đọc kĩ cái quy định ! Thông cảm nha ! Mình sang đây post vậy ! Chắc đúng nơi rồi đúng không, hi vọng có nhiều pro giúp với !
    Mình đang làm một số bài tập về toán, gặp vài vấn đề với trình biên dịch khi khai báo mảng lớn, chuyển qua con trỏ thì cũng không ổn, mình thử một số trình biên dịch khác nhau từ 16bit như BC,TC sau đó 32bit là VC cũng không được, bạn nào có cách khắc phục giúp mình cái. Ví dụ mình thử một cái ví dụ đơn giản như sau nhé, mà chạy nó không được thế mới tức chứ :
    <Mình nhớ hôm qua có post bài này rồi mà hôm nay nhìn lại bài viết của mình vẫn thế không đổi, tìm mãi cái bài đấy không thấy đâu, hôm nay post lại vậy>

    File "dulieu.txt" của mình tạm như sau, mình zip nó lại, bạn nào tải về chạy thử xem giúp mình nhé .http://rapidshare.com/files/105855987/dulieu.rar.html
    0.0000000002 0.0000000001 0.0000000003
    0.0000000001 0.0000000002 0.0000000003
    .................................................. ........
    ..........256x256 dòng.............................
    .................................................. ........
    Mình dùng BC chạy cái này thì với max = 127 là OK nhưng khi cho lớn hơn chút thì nó tèo luôn ! Cho qua VC thì khi chạy nó báo lỗi !
    Bạn nào xem qua giúp mình cái nhé. Many thanks !
    PHP Code:
    #include <stdio.h> 
    #include <conio.h> 
    #include <malloc.h> 

    #define max 256 
    typedef float MYARR[max]; 

    void createArray(MYARR *u


        
    FILE *f
        
    int i,j
        
    float d1,d2,d3

        
    fopen("dulieu.txt","rt"); 

        for (
    i=1;i<=max;i++) 
            for(
    j=1;j<=max;j++) 
            { 
                                     
                    
    fscanf(f,"%f %f %f",&d1,&d2,&d3); 
                    
    u[i][j] = d1
            } 

        
    fclose(f); 



    void main() 


        
    MYARR *u
        
    = (MYARR *)malloc(max sizeof (MYARR));       

        
    createArray(u); 

        
    free(u); 
        
    getch(); 
         



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

    À, cái code trên khi mình cho max = 15 thì nó chạy ổn, nhưng khi cho lên 16 nó đi luôn, chạy sai liền...cho lớn hơn nữa thì nó đơ luôn, không hiểu tại sao vì mình đã dùng con trỏ rồi, mình nghĩ nó không bị ảnh giới hạn 64K chứ nhỉ, thế sao nó lại đơ...Bạn nào giải thích dùm mình cái !
    Khi mình chạy với VC thì nó báo lỗi thế này :

  3. #3
    Ngày gia nhập
    08 2006
    Nơi ở
    TpHCM
    Bài viết
    202

    256x256 * 8 =0.5 MB thì có chi lớn, 20000000 * 4 = 80MB ct vẫn còn chạy tốt
    Đã được chỉnh sửa lần cuối bởi nguyentuan2 : 08-04-2008 lúc 11:51 PM.

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

    Mình cũng đồng ý là nó chưa lớn lắm, vì mình còn phải làm với dữ liệu lớn hơn vầy nhiều cơ ! Nhưng nó chạy sai và đơ luôn với là vấn đề bạn ạ ! Bạn test thử dùm mình xem thế nào với ! Hay do cái trình biên dịch của mình ! Thanks !

  5. #5
    Ngày gia nhập
    08 2006
    Nơi ở
    TpHCM
    Bài viết
    202

    cậu thử thế này

    u[i-1][j-1] = d1;
    chắc là do sai range, phong cách pascal lại ôm nguyên vào đây
    Đã được chỉnh sửa lần cuối bởi nguyentuan2 : 08-04-2008 lúc 11:49 PM.

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

    Mặc định Vấn đề với kích thước lớn !

    Nó là mảng con trỏ mừ ! Bạn copiler thử hộ mình chưa, nó không báo lỗi mừ, sửa lại như bạn thì mình thay đổi chút lại trên thôi, nhưng vấn không chạy được ! Ví dụ mình làm một code đơn giản thế này nhé, cũng là đọc cái file .txt ở trên nhé, nó vẫn lỗi như trên tức là sao nhỉ : Các bạn thử compiler hộ mình chút nhé, vì mình làm rùi nó không ổn mới hỏi, không phải mình nói linh tinh đâu ! hì hì hì....

    À ,còn vấn đề với cái VC trên bạn nào biết chỉ dùm mình với nhé ! Mấy cái này làm mình đau đầu mấy hôm nay mà chưa tìm ra hướng giải quyết ! Thanks !

    PHP Code:
    #include <stdio.h> 
    #include <conio.h> 
    #include <malloc.h> 

    #define max 128 

    void createArray(float *u


        
    FILE *f
        
    int i,j
        
    float d1,d2,d3
        
    fopen("dulieu.txt","rt"); 
        for(
    i=1;i<=max;i++) 
            for(
    j=1;j<=max;j++) 
            { 
            
    fscanf(f,"%f %f %f",&d1,&d2,&d3); 
            *(
    u+i*max+j) = d1
            } 

        
    fclose(f); 


    void main() 


        
    float *u
        
    int i,j

        
    = (float*)malloc(max*max*sizeof(float)); 

        
    createArray(u); 

        for(
    i=1;i<=max;i++) 
        { 
            for(
    j=1;j<=max;j++) printf("%f",*(u+i*max+j)); 
            
    printf("\n"); 


        } 

        
    free(u); 
        
    getch(); 



    Đã được chỉnh sửa lần cuối bởi vuongchieuquan : 08-04-2008 lúc 11:59 PM.

  7. #7
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Lỗi out_of_bound rùi, bác nguyentuan nói chính xác rùi đó. Mãng trong C không hề có error range checking nên cậu sẽ không gặp bug nếu có truy xuất ngoài vùng cho phép. Nhưng run-time thì cậu chịu khó chờ bằng niềm tin vậy
    C Code:
    1. #include <stdio.h>
    2. #include <malloc.h>
    3.  
    4. #define max 256
    5. typedef float MYARR[max];
    6.  
    7. void createArray(MYARR *u)
    8. {
    9.   FILE *f;
    10.   int i,j;
    11.   float d1,d2,d3;
    12.   f = fopen("dulieu.txt","rt");
    13.   for (i = 0; i < max; i++){
    14.     for(j = 0; j < max; j++){
    15.       fscanf(f,"%f %f %f",&d1,&d2,&d3);
    16.       u[i][j] = d1;
    17.     }
    18.   }
    19.   fclose(f);
    20. }
    21.  
    22.  
    23. int main()
    24. {
    25.   int i, j;
    26.   MYARR *u;
    27.   u = (MYARR *)malloc(max * sizeof (MYARR));      
    28.    
    29.   for (i = 0; i < max; i++){
    30.     for(j = 0; j < max; j++){
    31.       printf("%f", u[i][j]);
    32.     }
    33.     printf("\n");
    34.   }
    35.  
    36.   createArray(u);
    37.   free(u);
    38. }

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

    Ug, đúng là mình chuyển kiểu này thì chạy được thật, nhưng chưa nhìn thấy bao giờ. Thanks bạn nhé !
    Mình dùng TC, BC chạy thì không được, chỉ được với VC, không hiểu sao nhỉ, vì dùng với con trỏ thì không bị giới hạn 64K với vùng nhớ rùi còn gì nữa nhỉ.
    Bạn nào hiểu giải thích dùm mình với !

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