Ciao ragazzi, in primis mi scuso gia' se non saro' chiaro.
Mi e' venuto il classico dubbio della domenica.
Allora comincio con il definire una struttura di questo tipo:
adesso creo due puntatoricodice:struct object { char name[18]; char second[40]; unsigned short address; unsigned short nfeat; unsigned short present; unsigned short width; unsigned short height; unsigned short power; struct feature * features; };
Il primo verra' allocato in questo modo:codice:struct object * objs_tmp; struct object * objs;
quando avro' reperito il valore di nfeat della struttura potro' inizializzare:codice:objs_tmp= calloc(sizeof(struct object), 2);
La dimensione massima di questo array sara' sempre la stessa ed e' data da nfeat.codice:objs_tmp[1].features = calloc(sizeof(struct feature), objs_tmp[1].nfeat);
Cambiera' il numero di valori contenuti, cioe' inizialmente conterra' 20 valori poi 30 e cosi via.
objs_tmp e' di supporto a objs, ossia quando finisco il suo "utilizzo" lo copio in objs.
E qui mi sorge il dubbio.
Per copiarlo utilizzo la funzione memcpy
In questo modo la funzione copiera' il numero giusto di byte??codice:memcpy(objs, objs_tmp, sizeof(struct object) * 2);
Penso di si perche' avendo una volta definito la grandezza dell'array features la memoria nel heap dovrebbe essere alloccato e fine, quindi poi quando la si copia non ci dovrebbero sorprese indesiderate, ma non sono sicuro al 100% .
![]()
ciao e grazie

Rispondi quotando