Sắp xếp mảng theo thứ tự tăng dần bằng con trỏ

đề bài là sắp xếp mảng nhập vào từ bé đến lớn bằng con trỏ. cho em hỏi tại sao khi không có dòng p=(int *)malloc(n * sizeof(int )); thì mảng chỉ sắp xếp được 4 phần tử đổ xuống, còn khi có p=(int *)malloc(n * sizeof(int )); mới có thể sắp xếp từ 5 phần tử trở lên mà không bị “windows has stop working”

 #include <stdio.h>
    void xuat(int *p,int n){
        for (int  i=0; i<n; i++){
            printf("%d\n",*(p+i));
        }
    }
    void nhap(int *p, int n){
    	int i;
    	for (i=0; i<n; i++){
    		printf ("phan tu thu %d: \n",i);
    		scanf ("%d",(p+i));
    	}
    }
    void giaohoan(int *a, int *b){
        int doi;
        doi=*a;
        *a=*b;
       *b=doi;

    }
    void sap_xep_be_den_lon(int *p, int n){
        for (int i=0; i<n-1; i++){
            for (int j=i+1; j<n; j++){
                if (*(p+i)>*(p+j)) giaohoan((p+i),(p+j));
            }
        }


    }
    int main()
    {
        int *p;

        int n;

        printf("nhap so phan tu mang: ");
        scanf ("%d",&n);

   **_p=(int *)malloc(n*sizeof(int ));_**

nhap(p,n);
        sap_xep_be_den_lon(p,n);
        printf("\n");
        xuat(p,n);
    	return 0;
    }
  • malloc() là hàm cấp phát động. Khi không có nó đáng ra nó sẽ out ngay từ lúc bạn nhập, chắc có lẽ vì máy của bạn còn thừa bộ nhớ trong RAM nên nó cho phép truy cập vào.

  • Còn khi bạn gọi p = malloc(n * sizeof(int)); thì cũng có nghĩa là chương trình của bạn nó đang bảo hệ điều hành là "ê, cho tao n ô nhớ có khả năng lưu trữ biến kiểu int", như vậy là bộ nhớ đã được cấp phát thì bạn mới có thể sử dụng được.

4 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?