Błąd w zwolnieniu pamięci

0

Mam do wczytania macierz z pliku i policzenie wyznacznika, mam posłużyć się też dynamiczną alokacją pamięci i użyłem valgrinda do sprawdzenia czy pamięć jest poprawnie zwalniana i okazało się, ze nie do końca. Co pominąłem?

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

void matrix_free(int*** matrix, int s);
int det(int** matrix, int s);
int** alloc(int s);

int main()
{
    int i,j,liczba,size, sum;
	int** matrix;
    FILE* f;

    f = fopen("matrix.txt", "r");
    if (f == NULL) {
        printf("Blad otwarcia pliku liczby.txt\n");
        return 1;
    }
    printf("Pomyslnie wczytano macierz\n");
    fscanf(f, "%d", &size);
    printf("Rozmiar tablicy to: %d\n", size);


	matrix = alloc(size);

    printf("Macierz zostala wypelniona zerami: \n");
    for (i = 0; i < size; i++) {
        for (j = 0; j < size; j++) {
            printf("%i\t", matrix[i][j]);
        }
        printf("\n");
    }

    printf("Sizeof matrix: %li \n", sizeof(matrix));
    printf("Rozmiar macierzy: %i \n", size);

        for (i = 0; i < size; i++) {
            for (j = 0; j < size; j++) {
                fscanf(f, "%i", &liczba);
                matrix[i][j] = liczba;
                printf("%i\t", liczba);
            }
            printf("\n");
        }


    printf("Macierz zostala wypelniona: \n");
    for (i = 0; i < size; i++) {
        for (j = 0; j < size; j++) {
        }
    }

    printf("Wyznacznik: %d \n", sum = det(matrix, size));
    matrix_free(&matrix, size);
    return 0;
}

void matrix_free(int*** matrix, int s)
{
    int** m = *matrix;
    int i;
    for(i = 0; i < s; i++)
    {
        free(m[i]);
    }
    free(m);

    *matrix = NULL;
}

int det(int** matrix, int s)
{
    int i = 0, j = 0, sum = 0;

    if(s == 1)
        return sum = matrix[i][j];
    if(s == 2)
        return sum = matrix[0][0] * matrix[1][1] - matrix[0][1] * matrix[1][0];
    else
        return 55;

}

int** alloc(int s)
{
	int** matrix;
	int i;

	matrix = (int**)malloc(s * sizeof(int*));
    for (i = 0; i < s; i++)
	{
        matrix[i] = calloc(s, sizeof(int));
    }

	 

Valgrind:

HEAP SUMMARY:
==2792==     in use at exit: 552 bytes in 1 blocks
==2792==   total heap usage: 7 allocs, 6 frees, 5,732 bytes allocated
==2792== 
==2792== LEAK SUMMARY:
==2792==    definitely lost: 0 bytes in 0 blocks
==2792==    indirectly lost: 0 bytes in 0 blocks
==2792==      possibly lost: 0 bytes in 0 blocks
==2792==    still reachable: 552 bytes in 1 blocks
==2792==         suppressed: 0 bytes in 0 blocks

 
0

Zapomniałem o zamknięciu pliku, teraz nie ma wycieku.

1 użytkowników online, w tym zalogowanych: 0, gości: 1