Sto modificando un pezzo di codice, che fa parte di un grande progetto, che utilizza "const" per inizializzare un gruppo di matrici. Poiché voglio parametrizzare questi const, devo adattare il codice per usare "malloc" per allocare la memoria. Sfortunatamente c'è un problema con le strutture: non sono in grado di allocare memoria dinamica nella struttura stessa. Eseguirlo fuori causerebbe molte modifiche al codice originale.Memoria dinamica all'interno di una struttura
Ecco un piccolo esempio:
int globalx,globaly;
struct bigStruct{
struct subStruct{
double info1;
double info2;
bool valid;
};
double data;
//subStruct bar[globalx][globaly];
subStruct ** bar=(subStruct**)malloc(globalx*sizeof(subStruct*));
for(int i=0;i<globalx;i++)
bar[i]=(*subStruct)malloc(globaly*sizeof(subStruct));
};
int main(){
globalx=2;
globaly=3;
bigStruct foo;
for(int i=0;i<globalx;i++)
for(int j=0;j<globaly;j++){
foo.bar[i][j].info1=i+j;
foo.bar[i][j].info2=i*j;
foo.bar[i][j].valid=(i==j);
}
return 0;
}
Nota: nel codice del programma sto modificando globalx e globaly erano const di in uno spazio dei nomi specificato. Ora ho rimosso "const" in modo che possano agire come parametri impostati esattamente una volta.
Riepilogato: come è possibile allocare correttamente la memoria per il sottostruttura all'interno della struttura? Grazie mille!
Max
Sei sicuro che questo è 'C++' e non 'c'? –
** Non usare ** malloc' o 'free' sugli oggetti. Il costruttore e il distruttore non saranno chiamati. Usa 'new' e' delete' – Yacoby
Questo è ciò che si chiama cattivo stile C++. I bambini, non lo fanno mai. –