Zeiger Problem von Daten im struct



  • #include <iostream>
    
    using namespace std;
    
    struct a{
        int b;
        int * c;
    };
    
    int * getdata(){
        int data[2]={1,2};
        cout << data[1] << endl;
        return data;
    }
    
    struct a getinfo(){
    
        a mystruct;
        mystruct.b=10;
    
        mystruct.c=getdata();
    
        cout << mystruct.c[0] << endl;
    
        return mystruct;
    
    }
    
    int main()
    {
        a mystruct;
        mystruct=getinfo();
        cout << mystruct.c[1] << endl;
        return 0;
    }
    

    Hi

    ich würde gerne in der main auf data zugreifen es funktioniert bloß nicht!
    Ich nehme an man muss den struct initialisieren aber wie funktioniert das?

    Bin noch sehr ungeübt mit C++ und Zeigern!



  • C++zeiger schrieb:

    int * getdata(){
        int data[2]={1,2};
        cout << data[1] << endl;
        return data;
    }
    

    Lass mich raten, du liest gerade C++ von A bis Z?



  • Bin noch sehr ungeübt mit C++ und Zeigern!

    Das merkt man.
    Wie lernst du?
    Mein Vorposter hat eine schlimme Vorahnung.

    Dir jetzt irgendetwas zu erklären bringt gar nichts, da du nicht mal die wichtigsten Sprachgrundlagen beherrschst.

    Am besten ein Grundlagenbuch besorgen, einfach mal hier runterscrollen bis "Bücher"...



  • C++zeiger schrieb:

    int * getdata(){
        int data[2]={1,2};
        cout << data[1] << endl;
        return data;
    }
    

    Man, Kerls...wo nehmt Ihr nur immer diesen Schwachsinnscode her?

    Ist Dir klar, dasss der Zeiger den Du zurückgibst auf ein "array von int" zeigt, dass zerstört wird, sobald die Funktion getdata() verlassen wird?

    Dein Compiler sollte Dich vor so etwas warnen - also: alle Warnungen einschalten!



  • C++zeiger schrieb:

    int * getdata(){
        int data[2]={1,2};
        cout << data[1] << endl;
        return data;
    }
    

    Deine Funktion soll einen int-Pointer zurückgeben, du gibst jedoch nur ein einfaches int zurück => FEHLER



  • kralo9 schrieb:

    C++zeiger schrieb:

    int * getdata(){
        int data[2]={1,2};
        cout << data[1] << endl;
        return data;
    }
    

    Deine Funktion soll einen int-Pointer zurückgeben, du gibst jedoch nur ein einfaches int zurück => FEHLER

    😕



  • würg schrieb:

    kralo9 schrieb:

    C++zeiger schrieb:

    int * getdata(){
        int data[2]={1,2};
        cout << data[1] << endl;
        return data;
    }
    

    Deine Funktion soll einen int-Pointer zurückgeben, du gibst jedoch nur ein einfaches int zurück => FEHLER

    😕

    Ah verdammt! 😃 Hab' nich richtig hingesehen. Ich hab auf das std::cout geguck mit dem data[1] ... natürlich! du gibst ein Array zurück, noch schlimmer ^^

    oder wird beim return automatisch ein pointer erstellt?



  • oder wird beim return automatisch ein pointer erstellt?

    Ja. Nennt sich array-to-pointer decay.



  • Sone schrieb:

    oder wird beim return automatisch ein pointer erstellt?

    Ja. Nennt sich array-to-pointer decay.

    Und man erhält einen Pointer auf ein nicht mehr existierendes Array...


Anmelden zum Antworten