No... questa istruzione
codice:
puntatore = malloc(sizeof(int));
alloca solamente lo spazio a contenere un intero. E' pur vero che, in minima quantità, si potrà andare a scrivere anche oltre la memoria allocata, ma solo fino ad un certo punto.
Questo codice, ad esempio, non fa esattamente quello che ci si aspetta:
codice:
char *c, *d;
int i;
c = (char*) malloc(sizeof(char));
d = c;
for (i=0; i<100; i++) {
*c++ = 'N';
}
printf("%s\n\n", d);
Ci si aspetterebbe di vedere una sfilza di 100 caratteri 'N' a video... in realtà se ne vedono meno (io, compilando con Dev-C++ su una macchina PIII 450) vedo 16 'N' e poi un po' di caratteri insignificanti. Questo perchè l'istruzione
codice:
c = (char*) malloc(sizeof(char));
ha riservato per il mio puntatore solamente 1 carattere ed io ho sconfinato lo spazio a me riservato.
Modificando, invece, l'allocazione in questo modo:
codice:
c = (char*) malloc(100 * sizeof(char));
chiedo di riservare 100 byte e in questo modo a video vedrò esattamente la sfilza di 100 caratteri 'N'.
Questo significa che, comunque, devi risalire alla lunghezza se vuoi riservare sufficiente spazio per contenere la stringa.
Ciao.