PDA

View Full Version : [C/C++] struct e allocazione di memoria


ingframin
03-06-2016, 22:01
Buona sera,
stavo vedendo dei video su youtube e in uno di questi il tipo fa questo esempio:

struct Data{
char buffer[100];
};

struct Data func(){
struct Data d;
strcpy(d.buffer,"stringa che non ricordo",100);
return d;
}



E a seguito di questo esempio dice che tutto l'array verrà restituito sullo stack...
Secondo me invece, in cima allo stack resterà una struttura che contiene il puntatore al buffer;
Perché l'intero array dovrebbe restare sullo stack? È per via del fatto che dichiara la struttura nella funzione?
Poi... se fa strcpy su un array non inizializzato, non ha un segmentation fault?
:confused:

WarDuck
04-06-2016, 19:13
Con quella signature è probabile che sia strncpy, la quale specifica tra le altre cose il numero massimo di bytes da scrivere (rispetto alla semplice strcpy).

Poiché la stringa è literal e const, questa è terminata da '\0', la copia avviene correttamente (la strncpy così come la strcpy si ferma se c'è un terminatore nella sorgente, la differenza è appunto che la prima effettua anche un controllo sul numero massimo di bytes da scrivere).

Riguardo quello che succede in func, viene allocato spazio sullo stack pari a sizeof(struct Data), quindi i 100 bytes del buffer.

Pur non essendo inizializzato il buffer (o meglio la memoria è allocata, contenuto "random") è comunque lecito scrivere sullo stack, quindi non hai alcun segmentation fault.

A seconda del livello di ottimizzazione e di dove viene invocata func è possibile che non vi sia alcuna copia associata a quel "return d".

ingframin
05-06-2016, 20:15
Grazie mille del chiarimento :)