array übergeben... seltsam



  • Hallo.
    Ich habe eine Klasse a. Davon erzeuge ich 2 Instanzen (als Array). Jetzt habe ich eine Funktion die Pointer auf beide Instanzen braucht. Also übergebe ich einen Pointer auf die erste Instanz, und sollte jetzt doch in der Funktion auf beide Instanzen zugreifen können oder? Ich habe einen Test gemacht und mir die Adressen der Instanzen ausgeben lassen, außerhalb der Funktion bekomme ich 2 Werte, in der Funktion stimmt nach Übergabe nur noch die Adresse der ersten Instanz, die der 2. ist anders. Das bereitet mir Kopfzerbrechen, da das Programm abstürzt wenn ich versuche auf die 2. Instanz zuzugreifen.
    Hier mal ein Codeschnipsel:

    class pla
    {};
    
    void func(pla inst[])
    {
        inst[0].tu_was(); //funktioniert
        inst[1].tu_was(); //crasht
    }
    
    int main()
    {
        pla *instanz[2];
        instanz[0] = new pla(...argumente...);
        instanz[1] = new pla(...argumente...);
        func(instanz[0]);
        return 0;
    }
    

    Ich wär echt dankbar wenn ihr mir helfen könntet, ich brauch das wirklich recht rasch. Danke 🙂



  • vielleicht so?

    void func(pla *inst[])
    {
        inst[0]->tu_was(); 
        inst[1]->tu_was(); 
    }
    
    int main()
    {
        pla *instanz[2];
        instanz[0] = new pla;
        instanz[1] = new pla;
        func(instanz);
        return 0;
    }
    

  • Mod

    array06 schrieb:

    Ich habe eine Klasse a. Davon erzeuge ich 2 Instanzen (als Array).

    pla *instanz[2];
        instanz[0] = new pla(...argumente...);
        instanz[1] = new pla(...argumente...);
        func(instanz[0]);
        return 0;
    }
    

    du erzeugst hier 2 objekte, allerdings befinden sich nicht die objekte in einem array, sondern die zeiger auf diese objekte. abhilfe je nach gebrauch:

    pla instanz[2] =  // das ist ein array der objekte
        {
            pla(...argumente...),
            pla(...argumente...)
        };
        func(instanz); // oder func(&instanz[0]);
    

    oder aber, unter beibehaltung des ursprünglichen arrays aus zeigern:

    void func(pla* inst[])
    {
        inst[0]->tu_was();
        inst[1]->tu_was();
    }
    func(instanz); // oder func(&instanz[0]);
    

    oder schlicht

    pla *instanz = new pla[2];
        func(instanz);
    

    wobei hier stets nur der defaultkonstruktor benutzt werden kann. ein paar noch kompliziertere varianten sind möglich.



  • 👍 Danke! Jetzt gehts super.


Anmelden zum Antworten