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

Đề tài: Lỗi cấp phát bộ nhớ

  1. #1
    Ngày gia nhập
    06 2019
    Bài viết
    1

    Mặc định Lỗi cấp phát bộ nhớ

    mn xem giúp m cần Free như nào thì đúng ạ:

    free(Arr);

    ==> Memory leak, allocate 2 lần bằng malloc() thì cũng cần free 2 lần.

    code:

    int main()

    {

    float **Arr;

    int size , iRow, jCol;

    printf("Enter the level matrix A:"); scanf("%d", &size);

    Arr = AllocArr(size, size);

    if (!Arr)

    {

    return NULL;

    }

    for (iRow = 0; iRow < size; iRow++) {

    for (jCol = 0; jCol < size; jCol++) {

    printf("Arr[%d][%d]= ", iRow, jCol);

    scanf("%f", &Arr[iRow][jCol]);

    }

    printf("\n");

    }

    printf("Determinant of matrix A= %d", DetOfMatrix(Arr, size));

    free(Arr);

    _getch();

    return 0;

    }

    float** AllocArr(short szRow, short szCol)

    {

    int i;

    float **pArr;

    pArr = (float**)malloc(szRow * sizeof(float *));

    if (!pArr)

    {

    return NULL;

    }

    for (i = 0; i < szRow; i++)

    {

    pArr[i] = (float*)malloc(szCol * sizeof(float));

    if (!pArr[i])

    {

    return NULL;

    }

    }

    return pArr;

    }
    Đã được chỉnh sửa lần cuối bởi tuan nguyen 123 : 14-06-2019 lúc 06:39 AM. Lý do: sửa thêm

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

    Đúng là em cấp phát bao nhiêu lần thì em cũng phải hủy bấy nhiêu lần. Vì đây là con trỏ 2 cấp nên mình sẽ đi hủy từng cấp. Cụ thể là mình phải huỷ cấp con trước sau đó huỷ đến cấp cha.

    Code:
    if (Arr)
    {
        // Huy cap con
    	for(int i = 0; i < size; ++i)
    	{
    		if(Arr[i])
    		{
    		  free(Arr[i]);
    		  Arr[i] = NULL;
    		}
    	}
        // Huy cap cha
    	free(Arr);
    	Arr = NULL;
    }
    Học lập trình bắt đầu từ đâu ?

    https://www.youtube.com/HWStudio2019

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