Originariamente inviato da Fingard
Quindi io quando assegno 'a' a miaStringa[0] non sto accedendo ad un punto "a caso" della memoria no? diciamo... gli "effetti" della malloc permangono anche al di fuori della funzione dove la malloc viene chiamata giusto?
No, non è un punto a caso, è una locazione di memoria appositamente allocata nell'heap con la chiamata alla malloc(), ammesso ovviamente che questa sia andata a buon fine (e per questo è sempre preferibile verificare che il puntatore restituito dalla funzione non sia NULL, stesso discorso per calloc()). Rimarrà allocata fino a quando non la deallochi esplicitamente con free() (o in teoria anche con realloc() passando 0 come nuovo size) o comunque fino a quando non terminerà il processo, caso in cui il sistema operativo provvederà automaticamente a reclamare l'intero spazio in memoria allocato per il processo appena terminato.

Originariamente inviato da Fingard
Perchè io da qualche parte avevo trovato che una funzione come
[...]
In quel modo la memoria per la stringa viene deallocata al momento dell'uscita dalla funzione, quindi se accedi da main() all'indirizzo restituito non hai alcuna garanzia che quell'area di memoria non sia già stata sovrascritta. Tra l'altro fai attenzione al fatto che l'allocazione di un array/stringa con size variabile non è consentita dal C "tradizionale" (ISO C90) ma è un'estensione del C99, tra l'altro non supportata da tutti i compilatori.