Zwalnianie pamięci z tablicy dwuwymiarowej

0

Czy dobrze napisałem funkcję która ma zwalniać pamięć zarezerwowaną allocMAt? chodzi o funkcję deallocMat

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

typedef struct mat{
    int m;          /*liczba wierszy*/
    int n;          /*liczba kolumn*/
    float **tab;    /*wskaŸnik do zawartoœci macierzy*/
} matrix;

int allocMat( matrix *p, int m, int n ){
    int i;
    p->m = m;
    p->n = n;
    p->tab = (float **) calloc(m, sizeof(float *));
    if (!p->tab) return 100;
    for (i=0; i<m; i++){
        p->tab[i] = (float *) calloc(n, sizeof(float));
        if (!p->tab[i]) return 100;
    }
    return 0;
}

void deAllocMat (matrix *p,int m)
{
    int i;
    for(i=0; i<m; i++) free(p->tab[i]);
    free(p->tab);
}

int main(){
    int i,j;
    matrix A;
    int error;
    error = allocMat(&A, 400,5000);
    if (error) return error;
    for(i=0;i<5;i++){
        for(j=0;j<7;j++) printf("%f ", A.tab[i][j]);
        printf("\n");
    }
    deAllocMat(&A,400);

    return error;
}
0

Wygląda dobrze, ale dodaj sprawdzanie czy m->tab nie jest NULLem.

Chociaż jak nie masz narzuconego formatu danych, to wolałbym trzymać płaską tablicę niż tablicę wskaźników.

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