smalldragon ha scritto:
Per capirci
nel caso più banale del mondo e cioè
int b;
char *a;
int c;
c=0;b=0;
while (b=0)
{ a[c]=' '; c++; }
premesso il ciclo è stato fatto a posta per essere infinito per dare l'opportunita alla variabile a di travolgere la variabile c!
in questo caso come faccio a capire la dimensione della variabile a?
Intanto, la variabile 'a' ha la dimensione di un puntatore!
La dimensione dell'area di memoria PUNTATA dal puntatore memorizzato in 'a' e' un'informazione NON ACCESSIBILE al programmatore.
E' RESPONSABILITA' del programmatore ASSICURARSI di usare in modo corretto il puntatore.
Se a te serve avere questa informazione, DEVI implementarti un allocatore "custom".
In C/C++ ci sono dei metodi per rimpiazzare la malloc/calloc/free, che sono alla base ANCHE della "new/new[]/delete/delete[]"
SE ad 'a' allochi un blocco di memoria allocato con la malloc/calloc, LO PUOI liberare con la free, e probabilmente riesci a ricuperare la dimensione con la "_msize()"
SE ad 'a' allochi un blocco di memoria con la new/new[], LO DEVI liberare con la delete/delete[] (STESSO tipo), e NON HAI ACCESSO all'informazione relativa a quanta memoria e' stata allocata (la _msize NON FUNZIONA perche' il puntatore che ottieni NON E' lo stesso che e' stato ritornato dalla "malloc" usata nell'implementazione della "new/new[]"
Questo in GENERALE, poi c'e' il caso in cui allochi tipi primitivi, in questo caso la new/delete si dovrebbe comportare esattamente come la malloc/free
RICORDA: IL C NON INIZIALIZZA LE VARIABILI! Quindi il contenuto di QUALUNQUE VARIABILE, appena dichiarara e NON ESPLICIATEMEN inizializzata, e' PURA SPORCIZIA.
PUOI AVERE il colpo di C... che l'area di memoria conteneva ZERO, MA IN GENERALE NON TE LO ASSICURA NESSUNO.
Di nuovo: se le risposte non ti garbano, fai domande migliori!