Wahrscheinlich ein Pointer-Problem



  • Guten Abend.

    Also, mein Programm wird zwar erfolgreich kompiliert, aber irgendwas muss mit den Pointern nicht stimmen, oder?
    Sorry, bin noch Anfänger!

    #include <iostream>
    using namespace std;
    
    class Woot
    {
    	public:
    	int y;
    };
    
    void func1(Woot* p, int z)
    {
    	p->y = z;
    }
    
    void func2(Woot* p)
    {
    	cout << p->y << endl;
    }
    
    int main()
    {
    	Woot* p;
    	int z = 7;
    
    	func1(p, z);
    	func2(p);
    
    system("pause");
    }
    

    Ach ja, wie könnte ich den das ohne dieses "system("pause")" noch hinkriegen?
    Also so, dass ich das Ergebnis noch sehen kann, ohne dass sich das Fenster voreilig schliesst?



  • Wenn du wirklich möchtest das dir jemand hilft dann solltest du eine GENAUE
    Fehlermeldung zu deinem Problem hinzufügen.
    Es gibt hier nur wenige Mitglieder mit Kristallkugel. Auch hat nicht jeder Lust
    und/oder Zeit deinen Code irgendwo einzugeben.

    Woot* p erstellt KEIN konkretes Objekt. Du rufst also deine Funktionen mit nem
    ungültigen Zeiger auf. => Absturz oder ähnliches.



  • Du musst p erst initialisieren, d.h. auf ein Objekt zeigen lassen. Das könntest du z.B. mit

    p = new Woot();
    

    machen.

    Anstatt system("pause") könntest du einfach mit cin eine Variable einlesen, was dazu führt, dass auf ein Return gewartet wird.



  • #include <iostream>
    
    struct foo
    {
        int data;
        foo(int data = 0) : data(data) {}
    };
    
    void fnSet(Woot* ptr, int data)
    {
        if (ptr != NULL) ptr->data = data;
    }
    
    void fnShow(Woot* ptr, std::ostream& dest)
    {
        if (ptr != NULL) dest << (*p).data;
    }
    
    int main()
    {
        foo* ptr = NULL;
        fnSet(ptr, 10);
        fnShow(ptr);
        ptr = new foo;
        fnSet(ptr, 20);
        fnShow(ptr);
        std::cin.get();
    }
    

    ... also du musst schon den Zeiger irgendwo drauf zeigen lassen 😛



  • T00Run schrieb:

    Guten Abend.

    Also, mein Programm wird zwar erfolgreich kompiliert, aber irgendwas muss mit den Pointern nicht stimmen, oder?...

    Tja, mit Referenzen wär das nicht passiert... :p 😉

    #include <iostream>
    using namespace std;
    
    struct Woot {
       int y;
    };
    
    void func1(Woot& p, int z) {
       p.y = z;
    }
    
    void func2(Woot const& p) {
       cout << p.y << endl;
    }
    
    int main() {
       Woot p;
       int z = 7;
    
       func1(p, z);
       func2(p);
    

    Merke: Pointer nur dann, wenn man sie wirklich braucht. 😃

    Gruß,

    Simon2.

    P.S. Natürlich kann man das mit Referenzen auch falsch machen...

    int main() {
       Woot* p;
    
       func1(*p, z);
    ...
    


  • Woot obj;
    
    func1(&obj,5);
    

Log in to reply