Ragazzi c'è qualche differenza tra questi due stralci di codice:
ecodice:char stringa[100];
?codice:char *stringa = malloc(sizeof (char) * 100);
Ragazzi c'è qualche differenza tra questi due stralci di codice:
ecodice:char stringa[100];
?codice:char *stringa = malloc(sizeof (char) * 100);
la prima è un allocazione statica è viene effettuata nello stackOriginariamente inviato da sys14
Ragazzi c'è qualche differenza tra questi due stralci di codice:
ecodice:char stringa[100];
?codice:char *stringa = malloc(sizeof (char) * 100);
la seconda è un allocazione dinamica, che viene effettuata nell'heap
in internet trovi molte informazioni in merito. Per citare alcune delle più importanti, lo stack è molto limitato (di solito si parla di alcuni megabyte) mentre l'heap no (virtualmente potrebbe occupare grossa parte della ram)
Puoi fare qualche test cercando di allocare staticamente vettori molto molto grandi. Oltre un certo limite otterrai un errore di stack overflow, dovuto proprio al fatto che quel vettore occupa un quantitativo di memoria troppo grosso per essere allocato nello stack.
In aggiunta se quella chiamata fosse stata effettuata in una funzione, un eventuale puntatore ad una stringa sarebbe passabile tra funzioni se la memoria è allocata dinamicamente, mentre non lo sarebbe se allocata staticamente, in quanto quella porzione di stack "non è più raggiungibile" al termine della funzione.