PDA

View Full Version : Allocazione dinamica della Memoria


BigMeister
15-05-2014, 13:20
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

lorenzo001
15-05-2014, 13:35
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.

BigMeister
15-05-2014, 14:21
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?

lorenzo001
15-05-2014, 15:06
Non si è capito molto ... mostra effettivamente tutto il codice che ti dà l'errore.