Ciao a tutti,avrei bisogno di una mano. Devo creare un programma che estragga una sottomatrice a partire da una matrice inserita da tastiera. Cio' deve avvenire in una funzione dove vengono restituiti la matrice e i parametri. Ci deve essere qualche problema perché il programma viene compilato ma se mandato in esecuzione si chiude automaticamente. Mi date una mano?? Grazie!
#include <stdio.h>
#include <stdlib.h>
int ** get_submatrix(int **M, int n, int m, int startRow, int endRow, int startCol, int endCol, int *row, int *col);
void print_matrix(int **M, int n, int m);
int main() {
int i,j, n,m, val;
int **M;
int startRow=2;
int endRow=3;
int startCol=2; int endCol=3;
int **M1;
int n1,m1;
scanf("%d", &n);
scanf("%d", &m);
M = (int**)malloc(sizeof(int*)*n);
for (i = 0; i < n; i++) {
M = malloc(sizeof(int)*m);
}
for (i = 0; i < n; i++)
for (j = 0; j < m; j++) {
scanf("%d", &val);
M[j] = val;
}
print_matrix(M, n, m);
M1 = get_submatrix(M,n,m,startRow,endRow,startCol,endCol,&n1,&m1);
print_matrix(M1, n1, m1);
int s;
for (s = 0; s < n1; s++) free(M1[s]);
free(M1);
return 0;
}
int ** get_submatrix(int **M, int n, int m, int startRow, int endRow, int startCol, int endCol, int *row, int *col){
int i,j,r,c,l,k,primo,primoj;
int **M1;
k=0;l=0;
r=endRow-startRow+1;
primo=startRow+1; primoj=startCol+1;
c=endCol-startCol+1;
M1=(int**)malloc(sizeof(int*)*r);
for (i=startRow;i<endRow;i++)
for(j=startCol;j<endCol;j++)
for(k=0;k<r;k++)
for(l=0;l<c;l++)
// if(i >= startRow && i <= endRow && j >= startCol && j <= endCol)
{
M1[k][l]=M[j]; }
*row=r;
*col=c;
return M1;
}
void print_matrix(int **M, int n, int m){
int i,j;
for (i = 0; i < n; i++){
for (j = 0; j < m; j++){
printf("%d\t",M[j]);
}
printf("\n");
}
printf("\n");
}