Я думаю, что нашел решение: в функции allocaMatrice после первого динамического выделения (* matrice = (int **) calloc (* r, sizeof (int));) я допустил ошибку во втором динамическомраспределение вместо:
for(int i=0;i<*c;i++){
*matrice[i]=(int *) malloc ((*c)*sizeof(int));
}
я должен был написать это:
for(int i=0;i<*c;i++){
(*matrice)[i]=(int *) malloc ((*c)*sizeof(int));
}
Итак, последняя программа будет такой: #include #include
using namespace std;
void allocaMatrice(int *** matrice,int &r,int &c);
void leggiMatrice(int ** matrice,int r,int c);
void scriviMatrice(int ** matrice,int r,int c);
void deallocaMatrice(int ** matrice,int r);
int main (){
int **matrice;
int r, c;
allocaMatrice(&matrice,r,c);
leggiMatrice(matrice,r,c);
scriviMatrice(matrice,r,c);
deallocaMatrice(matrice,r);
cin.get();
return 0;
}
void allocaMatrice(int *** matrice,int &r,int &c){
int i;
cout<<"Dimmi il numero di righe della matrice"<<endl;
cin>>r;
while(cin.get()!='\n');
cout<<"Dimmi il numero di colonne della matrice"<<endl;
cin>>c;
while(cin.get()!='\n');
*matrice=(int **) calloc (r, sizeof(int*));
cout<<"c";
for(i=0;i<c;i++){
(*matrice)[i]=(int *) calloc (c,sizeof(int));
}
}
void leggiMatrice(int ** matrice,int r,int c){
for(int i=0;i<r;i++){
for(int j=0;j<c;j++){
cout<<"Dimmi l'elemeno alla riga "<<i+1<<" e alla colonna "<<j+1<<endl;
cin>>matrice[i][j];
while(cin.get()!='\n');
}
}
}
void scriviMatrice(int ** matrice,int r,int c){
for(int i=0;i<r;i++){
for(int j=0;j<c;j++){
cout<<matrice[i][j]<<"\t";
}
cout<<endl;;
}
}
void deallocaMatrice(int ** matrice,int r){
int i;
for(i=0;i<r;i++){
free((*matrice)+1);
}
free(matrice);
}