View Full Version : [Linguaggio C] Perchè questa cosa non si può fare?
EclipseMX
17-04-2008, 10:38
#include <stdio.h>
int main (){
int n;
printf("inserisci n");
scanf("%d", &n);
int vett[n];
}
Perchè secondo il mio prof questa cosa non si può fare? Finora l'ho usata e tutto funziona perfettamente, nessuno ha mai criticato la cosa...
amedeoviscido
17-04-2008, 10:43
a parte il fatto che l'utente potrebbe mettere un numero negativo, ma questo è un dettaglio; il tuo prof vuole farti di sicuro capire che c'è bisogno di allocare la memoria necessaria per un vettore di n elementi e a fine programma lo devi liberare.
EclipseMX
17-04-2008, 10:59
la zone di memoria associata al puntatore vett deve essere allocata staticamente, quindi n deve essere noto in fase di compilazione... scritto in quel modo non rispetta il C standard...
Infatti è esattamente questo quello che ha detto lui...
ma allora perchè funziona?
Sono quindi costretto ad allocare dinamicamente memoria ogniqualvolta non conosco la dimensione di un vettore....potevano dirlo direttamente nel corso di fondamenti 1, non farci arrivare a fondamenti 2 per scoprirlo :confused:
Finora l'ho usata e tutto funziona perfettamenteSemplicemente non è standard "ANSI C". È una caratteristica disponibile solo nello standard C99 e in C++.
Ormai la maggior parte dei compilatori sono C/C++ (e supportano anche le feature del C99 ... magari non tutte ma questa sì). Se però chiedi al compilatore di compilare in modalità "strict ANSI C" non te la accetta una cosa del genere.
EclipseMX
17-04-2008, 11:18
uhm, provo immediatamente...vediamo un po, io uso dev
sottovento
17-04-2008, 11:37
Oltre a quotare quanto ha detto andbin, aggiungerei una cosa: quando allochi memoria statica, sei sicuro che quest'ultima e' disponibile per la tua applicazione.
Se questa memoria non fosse disponibile, il programma non viene nemmeno caricato dal sistema operativo.
Nel caso non standard, questo non avviene poiche' si tratta di una allocazione dinamica. Come si fa a gestire il caso che la memoria non sia disponibile? Non viene allocato il vettore? Ritorna NULL? Eccezioni?
Questa e' una caratteristica molto comoda di alcuni compilatori, ma potrebbe essere anche piuttosto pericolosa...
tomminno
17-04-2008, 13:33
#include <stdio.h>
int main (){
int n;
printf("inserisci n");
scanf("%d", &n);
int vett[n];
}
Perchè secondo il mio prof questa cosa non si può fare? Finora l'ho usata e tutto funziona perfettamente, nessuno ha mai criticato la cosa...
In C99 è perfettamente lecito.
Con tutti i rischi di stack overflow connessi: pensa un pò se qualcuno digita 1 e poi si addormenta sul tasto 0:
100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Ho il vago sospetto che il programma non funzionerebbe a dovere
quando NON mi piace questa feature :D
il tuo prof fa bene, anche se è lecito in C99 non è buona abitudine
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.