ciao a tutti
ho dei problemi con l'allocazione di risorse.
ecco il codice.
molte cose non hanno senso nè utilità, poichè è soltanto un esecizio.
l'ultima istruzione, la printf, mi stampa una stringa di 4 caratteri, e anche il campo size contiene 4. Dunque immagino che sto allocando spazio sufficiente per un semplice puntatore e non per i dati.
codice:
typedef struct {
void *campo;
size_t size;
} mystruct;
codice:
// crea una nuova struttura
mystruct nuova;
// crea un buffer di dimensioni stabilite (dovrei controllare il risultato di malloc..)
void *buffer = malloc(500*sizeof(char));
// copia i dati nel buffer (non ha senso ma è solo una prova, verrà sostituita da una funzione di lettura su stdin)
strncpy(buffer, "prova prova prova prova", sizeof(&buffer));
// alloca per il puntatore void di mystruct abbastanza spazio (che ora è noto) per contenere i dati del buffer
nuova.campo = malloc(strlen(buffer));
if(nuova.campo == NULL)
return -1;
// copia quindi i dati dal buffer al puntatore
strncpy(nuova.campo, buffer, strlen(buffer));
// copia la dimensione del messaggio nel campo apposito
nuova.size = strlen(buffer);
//qua dovrei rilasciare la memoria di buffer
// verifica
printf("%s %d", (char*)nuova.buf, nuova.size);
inoltre mi chiedevo se come principio è giusto quello di allocare dinamicamente la variabile buffer, poichè questo pezzo di codice dovrei usarlo spesso. Un alternativa sarebbe sovrascrivere di continuo il buffer, stavolta allocato staticamente. Quale delle 2 è meglio secondo voi?
mi scuso per l'evidente ignoranza in materia