Ich überprüfte den Code eines Freundes und kam in eine interessante Debatte darüber, wie C/C++ Speicher auf dem Stack zuweist und seine Freigabe verwaltet. Wenn ich ein Array von 10 Objekten in einer Funktion erstellen, aber das Array zurückgeben würde, wird es freigegeben, wenn die Funktion auftaucht (wodurch die gegebenen Daten ungültig werden) oder wird es in den Heap platziert (was die Frage aufwirft, wie wir das machen) Lass es los?).Stapeldaten in C zurückgeben; Richtet es sich korrekt aus?
Beispielcode wie folgt:
Gene* GetTopTen()
{
// Create 10 genes (or 10 objects, doesn't matter)
Gene Ten[10];
// Sort out external pool data
Sort();
// Copy over data to the array of 10 objects
for(int i = 0; i < 10; Ten[i++] = pool[i]);
// Here is the core of my question:
return Ten;
}
Jede Hilfe wird sehr geschätzt, das ist meine Freunde in eine sehr interessante Frage drehen, und ich kann nicht antworten.
Nur ein FYI - der 3. Ausdruck in Ihrer 'for' Anweisung, Ten [i ++] = pool [i]', hat undefiniertes Verhalten, weil Sie mehr als einen gespeicherten Wert lesen, der in einem Ausdruck geändert wird. –