Il codice presentato non contiene particolari errori, anche se è grave la mancanza di ogni tipo di controllo sia sull'input utente (in particolare le dimensioni dell'array), sia sul successo delle varie operazioni di allocazione: controlli obbligatori per la robustezza del programma.
Al di là di questo, l'unica svista significativa consiste nell'uso di un "sizeof(double)" in luogo di un "sizeof(int)" nell'allocazione delle righe. Per il resto, ho apportato un paio di banalissimi ritocchi e compilato rapidamente il seguente sorgente con BCC 5.5.1 in ambiente Windows 7: funziona perfettamente.
codice:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int righe, colonne, i, j;
int **matrice;
printf(" Righe........: ");
scanf("%d", &righe);
printf(" Colonne......: ");
scanf("%d", &colonne);
puts("");
matrice = (int**)malloc((righe * sizeof(int*)));
for (i = 0; i < righe; i++)
{
matrice[i] = (int*)malloc(colonne * sizeof(int));
}
for(i = 0; i < righe; ++i)
{
for(j = 0; j < colonne; ++j)
{
printf("Inserisci elemento riga %d e colonna %d: ", i, j);
scanf("%d", &matrice[i][j]);
puts("");
}
}
for(i = 0; i < righe; ++i)
{
for(j = 0; j < colonne; ++j)
{
printf("matrice[%d][%d]= %d ", i, j, matrice[i][j]);
}
puts("");
}
return 0;
}
Eccone l'output per una semplice sessione di prova:
codice:
Y:\>compile array2d.c
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
array2d.c:
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Y:\>array2d
Righe........: 3
Colonne......: 3
Inserisci elemento riga 0 e colonna 0: 9
Inserisci elemento riga 0 e colonna 1: 8
Inserisci elemento riga 0 e colonna 2: 7
Inserisci elemento riga 1 e colonna 0: 6
Inserisci elemento riga 1 e colonna 1: 5
Inserisci elemento riga 1 e colonna 2: 4
Inserisci elemento riga 2 e colonna 0: 3
Inserisci elemento riga 2 e colonna 1: 2
Inserisci elemento riga 2 e colonna 2: 1
matrice[0][0]= 9 matrice[0][1]= 8 matrice[0][2]= 7
matrice[1][0]= 6 matrice[1][1]= 5 matrice[1][2]= 4
matrice[2][0]= 3 matrice[2][1]= 2 matrice[2][2]= 1
Y:\>