|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Dec 2013
Messaggi: 20
|
Allocazione dinamica della Memoria
Salve ragazzi,
La domanda oggi è molto semplice (per chi la sa). Quando allochiamo dinamicamente memoria, ad esempio con la malloc, e lo facciamo per una stringa, facciamo questo: (char *)malloc(sizeof(char)); Quello che abbiamo appena fatto non vale però per tutta la stringa, ma solo per un carattere della stringa, la scrittura corretta sarebbe infatti: (char *)malloc(lunghezza*sizeof(char)); Ora, supponiamo di voler allocare memoria non nel main, ma in una funzione,la memoria allocata dinamicamente viene vista dal main? A me risulta di no, qualcuno può spiegarmi il perchè? Oppure a chiarirmi in generale la gestione delle memorie? Grazie |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jul 2008
Città: Roma
Messaggi: 542
|
Sicuramente viene vista da tutto il programma, da qualsiasi funzione compreso il main.
La memoria viene allocata nell'heap che è una zona di memoria visibile da tutto il processo. Devi fare attenzione che il puntatore che utilizzi sia visibile. |
|
|
|
|
|
#3 |
|
Junior Member
Iscritto dal: Dec 2013
Messaggi: 20
|
Molto bene. Cioè? Ti faccio un esempio:
Se faccio questo: int main(){ char *s; s = (char *)calloc(0, sizeof(char)); e poi in una funzione passo *s e scrivo: s = (char *)realloc(lunghezza*sizeof(char)); Tutto funziona egregiamente. Se dovessi fare invece: int main(){ char *s; e poi in una funzione passo *s e scrivo: s = (char *)calloc(0, sizeof(char)); s = (char *)realloc(lunghezza*sizeof(char)); Non funziona, va in segmentiation fault. Per quale motivo? |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jul 2008
Città: Roma
Messaggi: 542
|
Non si è capito molto ... mostra effettivamente tutto il codice che ti dà l'errore.
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 00:21.



















