C++ Pointer Problem



  • Hey,

    Ich habe 2 Funktionen die mir 3 Werte von einem Array wiedergeben (oder besser gesagt ein Pointer).

    Ich will natürlich erst beide Werte bestimmen und dann mir mal ausgeben lassen und zwar so:

    int* Version = GetGameVersion();
    	int* update = CheckUpdate();
    
    	cout << Version[0] << " " << Version[1] << " " << Version[2] << endl;
    	cout << update[0] << " " << update[1] << " " << update[2] << endl;
    

    Die Ausgabe von Version[0] - [2] sind korrekt und auch update[0] doch die Werte von update [1] und [2] sind 1638080 (was aber nicht sein kann!).

    Tausche ich nun die beiden cout Befehle aus, dann kommt der Fehler bei Version [1] und [2].
    Woran kann das bitte liegen? 😕

    Edit//
    So sehen die beiden Funktionen aus:

    int* pointer;
    	int v[3];
    	pointer = v;
    	v[0] = 0;
    	v[1] = 1;
    	v[2] = 14;
    	return pointer;
    

    Edit2// Verwende Visual Studio 2005



  • Wie sehen die Funktionen aus? Sicher, dass der Speicher, auf den die Pointer zeigen, nach Ende der Funktionen noch gültig ist?

    Edit:
    Aha, da ist der Fehler. Das Array in der Funktion existiert auf dem Stack, im "automatischen Speicher", soll heißen, sobald die Funktion zurückkehrt, ist der Speicher ungültig. Man kann in C++ keine Arrays zurückgeben. Du kannst aber Strukturen oder Klassen zurückgeben, die Arrays enthalten.



  • Habe es in meinen 1. Beitrag eingefügt.



  • Ich auch. 😉



  • Hm, ich könnte ja die Variable v auch einfach als static definieren oder? Dann werden die Werte nach dem Funktionsende nicht gelöscht... Ist vllt. nicht so elegant aber bei einer kleinen Anwendung sollte das ja kein Problem sein.



  • Du kannst, ja. Allerdings ist es wirklich sehr hässlich. Warum gibst du keine Struktur zurück?



  • Öhm, keine Ahnung! Aber dann mache ich es eben mit einer Struktur!
    Danke für die Hilfe! 🙂



  • Du kannst auch gleich einen operator << dafür schreiben:

    struct VersionInformation
    {
      ...
    };
    
    std::ostream& operator << (std::ostream& stream, const VersionInformation& info)
    {
      stream << ...
      return stream;
    }
    
    int main()
    {
      std::cout << getVersion();
    }
    

Anmelden zum Antworten