PDA

View Full Version : [C] Matrice dinamica


Ir0nM4id3n84
03-12-2004, 19:14
Ciao,
per non fare impicci con l'allocazione dinamica di una matrice ho fatto così e funziona:

#include <stdio.h>

int main(void){

int a,b;
scanf("%d\n%d", &a, &b);

int matrice[a][b];

matrice[7][7] = 2;
printf("\n%d", matrice[7][7]);

return 0;
}

E' una porcheria dal punto di vista stilistico o è una cosa abbastanza normale?

Se invece dichiaro la matrice int matrice[a][b]; insieme alle variabili a e b lo compila sempre ma quando lo faccio partire a volte da un messaggio di errore...come mai?

Grazie

beppegrillo
03-12-2004, 19:45
Se non inizializzi le variabili a e b non ci fai nulla...

Ir0nM4id3n84
03-12-2004, 20:24
cio io le variabili a e b le inizializzo con la scanf e così mi funziona e mi crea una matrice delle dimensioni immesse dall'utente....su win funziona, non so su linux...

Ziosilvio
03-12-2004, 21:40
Originariamente inviato da Ir0nM4id3n84
#include <stdio.h>

int main(void){

int a,b;
scanf("%d\n%d", &a, &b);

int matrice[a][b];

matrice[7][7] = 2;
printf("\n%d", matrice[7][7]);

return 0;
}

E' una porcheria dal punto di vista stilistico o è una cosa abbastanza normale?
Direi buona la prima.

Anzitutto non è codice C, visto che nei blocchi di codice C devi prima dichiarare tutte le variabili e poi eseguire le istruzioni.

Poi: matrice[7][7] è un punto che potrebbe non essere stato liberato, per cui con l'assegnazione andresti a sovrascrivere cose che non sai cosa sono, e che magari sono importanti.
Se invece dichiaro la matrice int matrice[a][b]; insieme alle variabili a e b lo compila sempre ma quando lo faccio partire a volte da un messaggio di errore...come mai?
Lo compila sempre perché a e b, appena dichiarate, hanno dei valori (presi a cappero, ma ce li hanno), ragion per cui la dichiarazione di matrice è sintatticamente corretta.
Che semanticamente sia sbagliata, il compilatore non lo può sapere.

In conclusione: studia l'allocazione dinamica --- e fai un ripasso sulle cose che vengono prima, che qualche lacuna ce l'hai.