Ich habe Probleme, herauszufinden, wie Sie den Speicher für diese Strukturen zuweisen und freigeben.Wie können diese verschachtelten Strukturen richtig zugeordnet werden?
Ich muss dies verwenden, um FiniteTable's in Newton-Interpolation zu verwenden.
typedef struct{
unsigned int empty;
float value;
}FiniteTableValue;
Die erste ist eine Art Knoten, der den wahren Wert hat.
typedef struct{
FiniteTableValue *column;
unsigned int length;
}FiniteTableRow;
FiniteTableRow speichert ein Array von FiniteTableValues.
typedef struct{
FiniteTableRow *row;
unsigned int length;
}FiniteTable;
FiniteTable speichert dann ein Array von FiniteTableRows.
typedef struct{
FiniteTable *tables;
unsigned int length;
}FiniteTableList;
FiniteTableList ist die Liste der FiniteTable der
Ich versuchte es mit valgrind zu debugg und es scheint, dass ich immer eine Adresse zuzugreifen, die ich nicht zuordnen.
Ist dies auch der richtige Weg, um alle freizugeben?
FiniteTableList *ftl ...
...
for(int i = 0; i < ftl->length; i++){
FiniteTable table = ftl->tables[i];
for(int j = 0; j < table.length; j++){
FiniteTableRow row = table.row[j];
free(row.column);
}
free(table.row);
}
free(ftl->tables);
free(ftl);
Was sind die Valgrind Fehler? Versuche mit '--track-origins = yes' zu laufen, wenn sie undefinierte Daten beinhalten. –
Es für "Bedingter Sprung oder Bewegung hängt von nicht initialisierten Wert (en)" Ich weiß, wo sie sind, aber alles, was ich wissen muss, ist, wie einfach alle diese Strukturen mit malloc – Felipe
initiieren In diesem Fall '--track-Herkunft = yes sollte Sie auf den Quellcode verweisen, den Sie reparieren müssen. Andernfalls müssen Sie die Valgrind-Fehler und den entsprechenden Quellcode posten. –