Array statici: si può fissarne la dimensione in runtime?

di il
2 risposte

Array statici: si può fissarne la dimensione in runtime?

Premetto che sono alle prime armi col C++.
Ho letto in vari testi che per poter dichiarare un'array statico ho bisogno, già in fase di compilazione, di conoscerne la dimensione. Ovvero, non ho la possibilità, in runtime, di inserire la dimensione a seconda delle necessità.
In pratica, il codice seguente non dovrebbe nemmeo essere compilato:

#include <iostream>
using namespace std;

int main()
{
    int n;
    cout << "Inserire la dimensione dll'array: ";
    cin >> n;
    int array[n];
    cout << "\n\nInserire gli elementi dll'array: \n";
    for (int i=0; i<n; i++) cin >> array[i];
    cout << "L'array inserito e': \n\n";
    for (int i=0; i<n; i++) cout << array[i] << '\n';
    
    system("PAUSE");
    return 0;
}
[/color]
Invece, non solo viene compilato, ma l'eseguibile risultante funziona perfettamente.
Sto forse studiando su libri obsoleti?

2 Risposte

  • Re: Array statici: si può fissarne la dimensione in runtime?

    Lo standard ANSI richiedeva espressamente la dimensione degli array statici in fase di compilazione.
    Circa 10 anni fa, dopo la nascita del C++ ed il C89, l'ANSI cede il passo ad un nuovo standard Il C99 che prevede, tra le diverse features, la creazione di VLA o array statici run-time.
    L'allocazione avviene nello stack ed è supportata dai compilatori recenti. Mi risulta che C# o Java non abbiano il VLA. Nel dubbio, meglio usare un'allocazione dinamica... ma è solo il mio modesto parere.

    Saluti,
    Max

    EDIT:
    ERRATA CORRIGE - Da google scopro che le allocazioni possono essere sia su stack che su heap a seconda del compilatore... gcc, per esempio alloca nello stack.
    fonte: http://en.wikipedia.org/wiki/Variable-length_arra
  • Re: Array statici: si può fissarne la dimensione in runtime?

    Grazie Max.
    Immaginavo si trattasse di una questione di standard.
    Mi era sorto il dubbio poichè dato che vari testi su cui sto studiando i puntatori e la memoria dinamica, sono recentissimi, mi sembrava strano che insistessero sul ribadire che non è possibile stabilire la dimensione di un array fuori la fase di compilazione.
    Probabilmente è solo una questione di didattica.
    Magari se avessi provato a compilare il programma di cui al mio precedente post con una versione di DEV-C++ un po' più datata, avrei ricevuto il messaggio di errore di cui si parla nei libri che sto leggendo.
Devi accedere o registrarti per scrivere nel forum
2 risposte