Pointerarray ...?



  • Hi Leute, da bin ich mal wieder 🙄,

    object* a = new object[100];
    
    for(int i=0; i < 100; ++i)
        a[i].blabla = blabla;
    
    funktionX(a);
    
    delete[] object;
    

    Dieser Code funktioniert.
    Folgender Code sollte ja eigentlich auch funktionieren, tut er aber nicht.

    object** a = new object*[100];
    
    for(int i=0; i < 100; ++i)
        a[i]->blabla = blabla;
    
    funktionX(*a);
    
    for(i = 0; i < 100; ++i)
        delete a[i];
    

    Vom delete jetzt mal abgesehen... das ist hier irrelevant.

    Jedenfalls scheint die FunktionX die beiden Codes nicht als glöeich zu empfinden.
    object ist eine Datenstruktur für Grafik und im ersten Fall wird alles gerendert, im zweiten Fall aber nur das erste Objekt des Arrays.

    Wie kann ich es zu Stande bringen, dass ich auch wirklich das Array, auf das gezeigt wird, der Funktion übergebe?
    Bzw. dass es klappt, dass die Funktion so arbeiten kann, wie im ersten Fall und nur ich selber das Pointerarray für eigene Zwecke nutze?

    Danke im Voraus... 🙂

    MfG MAV



  • Das:

    object* a = new object[100];
    

    Ist ein Zeiger, der auf ein Array von 100 objects zeigt.

    Das dagegen:

    object** a = new object*[100];
    
    for(int i=0; i < 100; ++i)
        a[i]->blabla = blabla;
    

    ist ein Zeiger, auf auf ein Array von 100 object-Zeigern zeigt. Diese 100 Zeiger sind natürlich nicht initialisiert und zeigen irgendwo in der Weltgeschichte herum. Die for-Schleife erzeugt also undefiniertes Verhalten.

    object ist eine Datenstruktur für Grafik und im ersten Fall wird alles gerendert, im zweiten Fall aber nur das erste Objekt des Arrays.

    Mal angenommen, die 100 Zeiger wären auf object-Objekte initialisiert. Dann ist das ganze immer noch kein Array von 100 Objekten, sondern immer noch ein Array von 100 Zeigern auf Objekte. Wenn FunktionX ein Array von Objekten haben will, kannst du ihr nicht ein Array von Zeigern übergeben ...

    Wie kann ich es zu Stande bringen, dass ich auch wirklich das Array, auf das gezeigt wird, der Funktion übergebe?

    FunktionX(a);

    [ Dieser Beitrag wurde am 10.06.2003 um 10:20 Uhr von Bashar editiert. ]



  • Ja nagut, die sind nicht initialisiert, sondern die zeigen alle auf bestimmte Objekte, also zeigen nicht irgendwo in der Weltgeschichte rum.
    Wie kann ich das denn übergeben, damit die FunktionX damit arbeiten kann?
    FunktionX(a) kann ich net sagen, die Funktion erwartet ja Object*.
    Oder muss ich die Funktion einfach für Object** überladen?

    MfG MAV

    [ Dieser Beitrag wurde am 10.06.2003 um 10:25 Uhr von Mis2com editiert. ]



  • Original erstellt von Mis2com:
    FunktionX(a) kann ich net sagen, die Funktion erwartet ja Object.
    Oder muss ich die Funktion einfach für Object
    * überladen?
    **

    Ein Pointer-Array ist was anderes als ein Object-Array. Wenn du ein Pointer-Array hast, existiert de facto kein Object-Array was du der Funktion übergeben könntest. Wie du das löst ist deine Sache.



  • Nagut, dann geht es so nicht, das wollt' ich ja nur wissen 🙂


Anmelden zum Antworten