Ich kann keinen Weg finden, ein Array ohne dynamische Speicherzuweisung zurückzugeben. Ich werde es im Detail anhand eines Beispiels erklären:
Bei der dynamischen Speicherzuordnung:C++ Rückgabe Array ohne dynamische Speicherzuweisung?
Device* getConnectedDevices() {
// scan for devices.
Device *connectedDevices = new Device[deviceCount]; // Dynamically allocate memory for the Devices
// Get for each device an ID
return connectedDevices;
}
void doSomething() {
// some code
// I need a list with all the connected devices!!
Device *connectedDevices;
connectedDevices = getConnectedDevices();
// do something with the array
}
doSomething() nicht wissen, die Größe des Arrays, so habe ich eine Struktur, dieses Problem zu lösen:
struct deviceArray {
Device* devices;
int deviceCount;
};
Ohne dynamische Speicherzuweisung: ich habe keine Ahnung, wie dies zu tun. Ich habe folgende Dinge ausprobiert:
- Vorbeilauf. Problem: Wir kennen die Array-Größe vor dem Scannen nicht.
- Zurück ohne dynamische Speicherzuweisung (lokaler Variable). Problem: Das Objekt existiert nicht mehr (natürlich).
Sie zuteilen nicht alles manuell, in C++ verwenden Sie einfach 'std :: VECTOR' oder ähnliche Klassen. –
das Zurückgeben eines 'lokalen Zeigers' ist immer ein Desaster, da die Adresse beim Beenden der Funktion nicht gültig ist. Daher ist eine dynamische Zuordnung erforderlich. – dlmeetei
'std :: vector' verwendet dynamische Speicherzuweisung. Der Unterschied besteht darin, dass Ihre Funktion den dynamisch zugewiesenen Speicher nicht explizit verwalten muss - ein Vektor verwaltet seinen eigenen Speicher. – Peter