Ho modificato le righe che davano errore così (ho messo un casting)
if((sm=(int**)malloc((N-1)*sizeof(int*)))==NULL){printf("impossibile allocare le righe"); return((int**)(-1));}
for (i=0;i<N-1;i++){
if((sm[i]=(int*)malloc((N-1)*sizeof(int)))==NULL){printf("impossibile allocare le colonne"); return((int**)(-1));}
}
Così il programma non dà errori nè warning da me su C::B (ho aggiunto anche una deallocazione delle colonne).
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int determinante(int**, int);
int **sottomatrice(int**, int, int);
void StampaMatrice(int**, int);
int **sottomatrice(int **m, int N, int k) //sottomatrice che si ottiene eliminando la prima riga e la colonna k dalla matrice m
{
int **sm, i, j;
if((sm=(int**)malloc((N-1)*sizeof(int*)))==NULL){printf("impossibile allocare le righe"); return((int**)(-1));}
for (i=0;i<N-1;i++){
if((sm[i]=(int*)malloc((N-1)*sizeof(int)))==NULL){printf("impossibile allocare le colonne"); return((int**)(-1));}
}
for (i=0; i<N-1; i++){
for (j=0; i<N-1; j++){
if (j==k){
while (j<N-1){
sm[i][j]=m[i+1][j+1];
j++;
}
break;
}
sm[i][j]=m[i+1][j];
}
}
return(sm);
for (i=0;i<N;i++) free(sm[i]);
free(sm);
}
int determinante(int **mat, int N)
{
int det,j;
det=0;
if (N==2){
det=mat[0][0]*mat[1][1]-mat[0][1]*mat[1][0];
}
else
for (j=0; j<N; j++){
det+=pow((double)(-1),(double)(j))*mat[0][j]*determinante(sottomatrice(mat, N, j), N-1);
}
return(det);
}
void StampaMatrice(int**mat, int N)
{
int i,j;
for (i=0; i<N; i++){
for (j=0; j<N; j++){
printf(" %d ",mat[i][j]);
}
printf("\n\n");
}
}
int main()
{
int determin, **matrix, N, i, j;
printf("Inserisci la dimensione della matrice da leggere\n");
scanf("%d",&N);
if((matrix=(int**)malloc(N*sizeof(int*)))==NULL){ printf("Impossibile allocare le righe"); return(-1);}
for (i=0;i<N; i++){
if((matrix[i]=(int*)malloc(N*sizeof(int)))==NULL){ printf("Impossibile allocare le colonne"); return(-1);}
}
for (i=0; i<N; i++){
for (j=0; j<N; j++){
printf("Inserisci il valore m[%d][%d] della matrice\n",i,j);
scanf("%d", &matrix[i][j]);
}
}
printf("La matrice di cui si vuole calcolare il determinante e'\n\n");
StampaMatrice(matrix, N);
if (N==1) determin=matrix[0][0];
else determin=determinante(matrix, N);
printf("Il determinante vale %d\n",determin);
system("pause");
free(matrix);
return(0);
}
Grazie a tutti, Oregon scusa ma la funzione exit non l'ho mai usata, il mio bagaglio di funzioni è piuttosto limitato