Ciao ragazzi, sto facendo i primi esercizi con l'allocazione dinamica per le matrici ma ho un problema: la mia matrice non viene returnata e perde un'iterazione all'interno dei cicli for. Il testo chiedeva di allocare una nuova matrice che per ogni elemento di A diverso da 0 creasse una riga in B contenente valore, riga e colonna.
#include <stdio.h>
#include <stdlib.h>
int **funz(int m, int n, int A[m][n], int nz){
printf("Inizio allocazione . . .\n");
int **B = calloc(nz, sizeof(int *));
if(B == NULL){
exit(-1);
}
int i,j;
for(i=0; i<3; i++){
B[i] = (int*)calloc(3, sizeof(int));
if(B[i] == NULL){
exit(-1);
}
}
printf("Allocazione avvenuta!\n");
int index = 0;
for(i=0; i<m; i++){
for(j=0; j<n; j++){
if(A[i][j] != 0){
B[index][0] = A[i][j];
B[index][1] = i;
B[index][2] = j;
index++;
}
}
}
return B;
}
int main(){
int m = 4;
int n = 4;
int A[4][4] = {{0,0,0,0},{5,8,0,0},{0,0,3,0},{0,6,0,0}};
int nz = 4;
int **B = funz(m,n,A,nz);
int i,j;
for(i=0; i<nz; i++){
printf("\n");
for(j=0; j<3; j++){
printf("%d ", B[i][j]);
}
}
return 0;
}