Δημοσιεύτηκε: 03 Ιουν 2011, 17:29
από migf1
Μπορείς να το κάνεις δεσμεύοντας δυναμικά μνήμη για τον πίνακά σου ως εξής:

Κώδικας: Επιλογή όλων

int main( void )
{
int nrows=5, ncols=10;
register int i,j;
int **array2d;

array2d = (int **) calloc( ncols, sizeof(int *) ); // δέσμευση μνήμης για 'ncols' δείκτες σε int (στήλες)
if ( !array2d ) // αποτυχία δέσμευσης...
return 1; // ανώμαλος τερματισμός προγράμματος

for (j=0; j < ncols; j++)
{
array2d[ j ] = (int *) calloc(nrows, sizeof(int) ); // δέσμευση μνήμης για 'nrows' int (γραμμή)
if ( !array2d[ j ] ) // αποτυχία δέσμευσης....
{ // απελευθέρωση όσων δεσμεύσαμε μέχρι τώρα
for (i=j; i > -1; i--)
free( array2d[ i ] );
return 1; // ανώμαλος τερματισμός προγράμματος
}
}

// σε αυτό το σημείο έχεις 'ncols' δείκτες (στήλες), με τον καθένα τους να δείχνει σε ένα πίνακα ακεραίων (γραμμές)
// οπότε κάνεις ότι θέλεις να κάνεις με τον 2Δ πίνακά σου

// απελευθέρωση της μνήμης που δεσμεύσαμε στην αρχή
for (j=0; j < ncols; j++)
for (i=0; i < nrows; i++)
free ( array2d[ j ][ i ] );
free( array2d );

return 0;
}