Pointer pointer passing by reference

0

I'm doing a program where I need to dynamically allocate 2 arrays, so I thought of doing this allocation within a function. I tried to do this, but it is giving "Targeting failed". Could someone help me?

void CriaMatriz(int ***matriz, int linhas, int colunas){

    int i,j;

    /* Alocação das linhas da matriz. */
    matriz = (int ***) malloc(linhas * sizeof(int **));

    /* Alocação das colunas da matriz. */
    for (i = 0; i < linhas; i++) {

        matriz[i] = (int **) malloc(colunas * sizeof(int*));

        /* Preenchimento da matriz. */
        for (j = 0; j < colunas; j++) {
            scanf("%d", matriz[i][j]);
        }
    }
}

int main() {

    int **matriz1, linhas, colunas;

    CriaMatriz(&matriz1, linhas, colunas);

}
    
asked by anonymous 19.08.2017 / 03:53

1 answer

0

There are some errors in the code regarding understanding what is happening. A two-dimensional array can be represented as a pointer to pointer, in your case, as quoted in the comments, you were trying to make a sort of three-dimensional array. The image below is a representation of how this goes into memory.

#include<stdio.h>#include<stdlib.h>int**CriaMatriz(intlinhas,intcolunas);intmain(intargc,char*argv){int**matriz1,i,linhas=2,colunas=2;matriz1=CriaMatriz(linhas,colunas);//Apósusodeve-seliberaramemóriafor(i=0;i<linhas;i++){//Liberandoaslinhasfree(matriz1[i]);}//Liberandooapontadorprincipalfree(matriz1);}int**CriaMatriz(intlinhas,intcolunas){//Vocêestavamanipulandoumavariávellocalinti,j,**matriz;//Agoratemosaalocaçãocorreta,teremosXponteirosparaponteirosmatriz=(int**)malloc(linhas*sizeof(int*));//CadaponteiroteráXcolunasdeinteirosfor(i=0;i<linhas;i++){matriz[i]=(int*)malloc(colunas*sizeof(int));}/*Preenchimentodamatriz.*/for(i=0;i<linhas;i++){for(j=0;j<colunas;j++){//Nóscolocamosovalornoendereçoapontadoscanf("%d", &matriz[i][j]);
        }
    }
    // retornando o endereço principal
    return matriz;
}
    
19.08.2017 / 18:24