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

Đề tài: Cấp phát bộ nhớ động - realloc tại sao gây ra lỗi?

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

    Thumbs up Cấp phát bộ nhớ động - realloc tại sao gây ra lỗi?

    C Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3. #include <malloc.h>
    4.  
    5. void NhapDaySo(int *,int);
    6. int *SoChiaHetCho3(int *,int);
    7. void InDaySo(int *);
    8.  
    9. int t;
    10.  
    11. int main()
    12. {
    13.    int n;
    14.    int *ptr_n;
    15.    int *ptr_chiahetcho3;
    16.    printf("So luong so muon nhap vao:");
    17.    scanf("%d",&n);
    18.  
    19.    ptr_n = malloc(n*sizeof(int));
    20.    ptr_chiahetcho3 = malloc(sizeof(int));
    21.  
    22.    NhapDaySo(ptr_n,n);
    23.    ptr_chiahetcho3 = SoChiaHetCho3(ptr_n,n);
    24.    printf("Nhung so chia het cho 3 la:");}
    25.  
    26.    InDaySo(ptr_chiahetcho3);
    27.  
    28.    getch();
    29.    return 0;
    30. }
    31.  
    32. void NhapDaySo(int *ptr,int n)
    33. {
    34.     int i;
    35.    for(i=0;i<n;i++)
    36.    {
    37.     printf("Nhap So Thu %d :",i+1);
    38.       scanf("%d",ptr+i);
    39.    }
    40. }
    41.  
    42. int *SoChiaHetCho3(int *ptr,int n)
    43. {
    44.     int i,j=0;
    45.    int *ptr_chiahetcho3;
    46.    ptr_chiahetcho3 = malloc(sizeof(int));
    47.    for(i=0;i<n;i++)
    48.    {
    49.     if(ptr[i]%3==0)
    50.       {
    51.         j++;
    52.         ptr_chiahetcho3 = realloc(ptr_chiahetcho3,j * sizeof(int));
    53.          ptr_chiahetcho3[j] = ptr[i];
    54.          t++;
    55.       }
    56.    }
    57.    return ptr_chiahetcho3;
    58. }
    59.  
    60. void InDaySo(int *ptr)
    61. {
    62.     int i;
    63.     for(i=0;i<t;i++)
    64.     {
    65.     printf("%d",ptr[i]);
    66.    }
    67. }
    Tớ không thể hiểu nổi nó sai chỗ nào nữa?
    Nói là một chuyện, làm là một chuyện. Chi bằng ta làm xong rồi hãy nói như vậy thì nói và làm sẽ là một chuyện.

  2. #2
    Ngày gia nhập
    07 2006
    Bài viết
    121

    C Code:
    1. [b]#include[/b] <stdio.h>
    2. [b]#include[/b] <conio.h>
    3. [b]#include[/b] <malloc.h>
    4.  
    5. [b]void[/b] NhapDaySo(int *,int);
    6. [b]int *[/b]SoChiaHetCho3(int *,int);
    7. [b]void[/b] InDaySo(int *);
    8.  
    9. [b]int[/b] t;
    10.  
    11. [b]int[/b] main()
    12. {
    13.    [b]int[/b] n;
    14.    [b]int *[/b]ptr_n;
    15.    [b]int *[/b]ptr_chiahetcho3;
    16.    printf("So luong so muon nhap vao:");
    17.    scanf("%d",&n);
    18.  
    19.    //ptr_n = malloc(n*sizeof(int)); [b]Chổ này sai[/b]
    20.  /*Sửa*/ptr_n=([b]int *[/b])malloc(n*sizeof(int));
    21.  
    22.   //ptr_chiahetcho3 = malloc(sizeof(int)); [b]Tương tự chổ này sai [/b]
    23. /*Sửa*/  ptr_chiahetcho3=(int *)malloc(sizeof(int));
    24.  
    25.    NhapDaySo(ptr_n,n);
    26.    ptr_chiahetcho3 = SoChiaHetCho3(ptr_n,n);
    27.  
    28.   // printf("Nhung so chia het cho 3 la:");} [b]chổ này dư }[/b]
    29.    printf("Nhung so chia het cho 3 la:");
    30.  
    31.    InDaySo(ptr_chiahetcho3);
    32.  
    33.    getch();
    34.    return 0;
    35. }
    36.  
    37. [b]void[/b] NhapDaySo(int *ptr,int n)
    38. {
    39.    [b]int[/b] i;
    40.    for(i=0;i<n;i++)
    41.    {
    42.     printf("Nhap So Thu %d :",i+1);
    43.         scanf("%d",ptr+i);
    44.    }
    45. }
    46.  
    47. [b]int[/b] *SoChiaHetCho3(int *ptr,int n)
    48. {
    49.     [b]int[/b] i,j=0;
    50.         [b]int[/b] *ptr_chiahetcho3;
    51.  
    52.     //ptr_chiahetcho3 = malloc(sizeof(int)); [b]Chổ này sai[/b]
    53.    [b]/*Sửa*/[/b]ptr_chiahetcho3=(int *)malloc(sizeof(int));
    54.    for(i=0;i<n;i++)
    55.    {
    56.     if(ptr[i]%3==0)
    57.       {
    58.         j++;
    59.         //ptr_chiahetcho3 = realloc(ptr_chiahetcho3,j * sizeof(int)); [b]Sai[/b]
    60.    [b]/*Sửa*/[/b]ptr_chiahetcho3 = (int*)realloc(ptr_chiahetcho3,j * sizeof(int));
    61.          ptr_chiahetcho3[j] = ptr[i];
    62.          t++;
    63.       }
    64.    }
    65.    return ptr_chiahetcho3;
    66. }
    67.  
    68. [b]void[/b] InDaySo(int *ptr)
    69. {
    70.     [b]int[/b] i;
    71.     for(i=0;i<t;i++)
    72.     {
    73.     printf("%d",ptr[i]);
    74.    }
    75. }
    Ở đây mình chỉ test về mặc cú pháp ngôn ngữ C, còn thuật toán thì chưa mình không biết cậu viết cái gì ?
    Đã được chỉnh sửa lần cuối bởi shinichi_haha : 02-12-2006 lúc 01:20 PM.

  3. #3
    Ngày gia nhập
    10 2006
    Bài viết
    107

    C Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3. #include <malloc.h>
    4.  
    5. void nhapdayso(int *,int);
    6. int *chiahetcho3(int *,int);
    7. void indayso(int *);
    8.  
    9. int t;
    10.  
    11. int main()
    12. {
    13.    int n,i;
    14.    int *ptr;
    15.    int *ptr_chiahetcho3;
    16.    printf("So luong so muon nhap vao:");
    17.    scanf("%d",&n);
    18.  
    19.    ptr = (int *)malloc(n*sizeof(int));
    20.    nhapdayso(ptr,n);
    21.  
    22.    ptr_chiahetcho3 = chiahetcho3(ptr,n);
    23.    printf("Nhung so chia het cho 3 la:");
    24.  
    25.    indayso(ptr_chiahetcho3);
    26.  
    27.    getch();
    28.    return 0;
    29. }
    30.  
    31. void nhapdayso(int *ptr,int n)
    32. {
    33.     int i;
    34.    for(i=0;i<n;i++)
    35.    {
    36.     printf("Nhap so thu %d :",i+1);
    37.       scanf("%d",&ptr[i]);
    38.    }
    39. }
    40.  
    41. int *chiahetcho3(int *ptr,int n)
    42. {
    43.     int i;
    44.    int j=0;
    45.    int *chiahetcho3;
    46.    chiahetcho3 = (int *)malloc(sizeof(int));
    47.    for(i=0;i<n;i++)
    48.    {
    49.     if(ptr[i]%3==0)
    50.       {
    51.          chiahetcho3[j] = ptr[i];
    52.         j++;
    53.         chiahetcho3 = (int *)realloc(chiahetcho3,j * sizeof(int));
    54.          t++;
    55.       }
    56.    }
    57.    return chiahetcho3;
    58. }
    59.  
    60. void indayso(int *ptr)
    61. {
    62.     int i;
    63.     for(i=0;i<t;i++)
    64.     {
    65.     printf("%d",ptr[i]);
    66.    }
    67. }

    Nhập vào dãy số và tìm những số chia hết cho 3,in chúng ra.
    Nói là một chuyện, làm là một chuyện. Chi bằng ta làm xong rồi hãy nói như vậy thì nói và làm sẽ là một chuyện.

  4. #4
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,749

    Được rồi chứ, Dreaminess thấy sửa như shinichi_haha là được chứ nhỉ. Vẫn còn sai ah?
    Email: admin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667 (Office: 04 6329 2380)
    Yahoo & Skype: dreaminess_world (Vui lòng chỉ rõ mục đích ngay khi liên hệ, cảm ơn!)

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó. Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp!

  5. #5
    Ngày gia nhập
    10 2006
    Bài viết
    107

    Đâu được rồi post kết quả lên, thanks
    Nói là một chuyện, làm là một chuyện. Chi bằng ta làm xong rồi hãy nói như vậy thì nói và làm sẽ là một chuyện.

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

    Mặc định Cấp phát bộ nhớ động - realloc tại sao gây ra lỗi?

    cho e hỏi hàm realloc trong c nó cấp lại bộ nhớ và có thể nó cấp ô nhớ khác. hay là nó giữ nguyên ô nhớ cũ và tăng thêm số lượng ô nhớ (hoặc giảm)? e mới coi c nên khôg bít rõ.

  7. #7
    Ngày gia nhập
    09 2010
    Nơi ở
    Hà Nôi
    Bài viết
    459

    Trích dẫn Nguyên bản được gửi bởi fanliver Xem bài viết
    cho e hỏi hàm realloc trong c nó cấp lại bộ nhớ và có thể nó cấp ô nhớ khác. hay là nó giữ nguyên ô nhớ cũ và tăng thêm số lượng ô nhớ (hoặc giảm)? e mới coi c nên khôg bít rõ.
    Sao lại đi đào mộ lên để hỏi thế này.
    Hàm realloc cấp phát lại bộ nhớ và vùng nhớ mới đc cấp phát có thể ở vị trí ( trong Heap) khác hoàn toàn với vùng nhớ cũ.

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

  1. Lập trình C Sau khi sử dụng realloc thi giá trị cũ của mảng bị thay đổi
    Gửi bởi trantrunghieu90 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 5
    Bài viết cuối: 30-12-2013, 05:03 PM
  2. Hỏi về Calloc mà Realloc!
    Gửi bởi conga2012 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 0
    Bài viết cuối: 31-12-2012, 02:59 PM
  3. Thắc mắc về realloc() malloc(). làm sao để copy 1 mảng
    Gửi bởi tonytrinh trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 0
    Bài viết cuối: 01-04-2010, 08:42 AM
  4. realloc hoạt động như thế nào?
    Gửi bởi zxy613 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-10-2009, 07:32 AM
  5. giúp em hàm realloc !!!
    Gửi bởi car0ot trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 3
    Bài viết cuối: 18-05-2008, 06:39 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