Garantisco che questa domanda sia stata richiesta in precedenza, ma non sono stata in grado di trovarla tramite la ricerca; mi dispiace in anticipo per eventuali licenziamenti.Istanziazione array C - Assegnazione stack o heap?
È la mia comprensione (potenzialmente errata) che si assegna alla pila solo quando si conosce la dimensione di un oggetto in fase di compilazione. Quindi, nel caso di inizializzazione di un array, si potrebbe fare uno di questi (e questo dovrebbe andare in pila):
char charArray[50];
Poiché la dimensione di questo array è noto al momento della compilazione, questo dovrebbe avere problemi.
D'altra parte, questo (credo) è anche codice valido:
char anotherCharArray[someVariable + 50];
sarebbe questo vanno in pila come bene? Sono abbastanza sicuro che il codice segfaults se sei libero(), quindi mi fa pensare che lo faccia, ma non ha senso per me. Allo stesso modo, è la sola situazione del 100% in cui è necessario utilizzare free() quando i dati sono stati assegnati tramite malloc?
Grazie in anticipo per il vostro aiuto.
@Shookit: è necessario specificare se si tratta di variabili locali o globali. –
@PaulR se la matrice è di lunghezza variabile, non può essere nell'ambito globale. –
È necessario distinguere tra * storage automatico * e * stack *, che è un modo di livello basso per memorizzare i dati. I dati inseriti nella memoria automatica possono essere collocati anche in altri luoghi, come nei registri. Nel caso di un array locale con una dimensione sconosciuta (nota come VLA: s), il compilatore può posizionarlo nello stack, è anche permesso allocare la memoria sull'heap (a patto che venga rilasciato nelle posizioni appropriate). In effetti, VLA: s non va bene insieme a 'setjmp' /' longjmp' in quanto potrebbero perdere (e sono autorizzati a farlo dallo standard C). – Lindydancer