[solved] string-array



  • hi!

    kurze frage:
    warum geht sowas hier nicht? steh auf der leitung.

    string **stringArray()
    {
        string *note[5];
        note[0] = new string( "hallo1" );
        note[1] = new string( "hallo2" );
        note[2] = new string( "hallo3" );
        note[3] = new string( "hallo4" );
        note[4] = new string( "hallo5" );
    
        for( int i = 0; i < 5; i++ )
            cout << ( *note[i] ) << endl;
    
        return note;
    }
    
    ...
    
        string **temp = stringArray();
    
        for( int i = 0; i < 5; i++ )
            cout << ( *temp[i] ) << endl;  // erster string wird korrekt ausgegeben, dann stürzt das programm ab.
    


  • iko79 schrieb:

    warum geht sowas hier nicht?

    Weil Du einen Zeiger auf ein lokales Stack-Objekt zurückgibst und verwendest, nachdem das Objekt vom Stack geschoben worden ist.

    Was soll eigentlich die Sache mit den verschachtelten Zeigern?



  • du müsstest in stringArray() vor note[..] = ... immer ein "sternchen" setzen, z.B.
    *note[0] = new string( "hallo1" );

    logisch, da du ja einen "doppelzeiger" hast (zeiger auf zeiger), musst du auch doppelt dereferenzieren.

    mfg,
    julian



  • Julian__ schrieb:

    du müsstest in stringArray() vor note[..] = ... immer ein "sternchen" setzen, z.B.
    *note[0] = new string( "hallo1" );

    logisch, da du ja einen "doppelzeiger" hast (zeiger auf zeiger), musst du auch doppelt dereferenzieren.

    Das klappt nicht, dann bräuchte er Dreifachzeiger. Der "Doppelzeiger" in der Typensignatur geht ja schon für das C-Array rauf.



  • Konrad Rudolph schrieb:

    Was soll eigentlich die Sache mit den verschachtelten Zeigern?

    wie meinst? naja, is halt nur 'n beispiel für ein pointer-array... wieso?

    wie kann ma in c++ sonst a pointer-array zurückgeben?



  • iko79 schrieb:

    wie kann ma in c++ sonst a pointer-array zurückgeben?

    Das ist schon in Ordnung so. Aber wozu überhaupt das Zeiger-Array?



  • naja, sowas brauch i halt manchmal... wenn i ein array rigendwelcher objekte hab dann arbeit' i ja eher mit pointern auf diese objekte als mit den objekten selbst genauso wie ich als funktionsparameter lieber pointer übergeb als das das gesamte objekt, aber das brauch i euch ja sicher net erzählen...
    sorry, aber i glaub i versteh die frage net ganz... meinst du jetz in dem speziellen fall? da machts natürlich keinen sinn. is wie gesagt nur 'n beispiel zu demonstrationszwecken, damit i net meinen kompletten sourcecode hier posten muss.

    iko79 schrieb:

    wie kann ma in c++ sonst a pointer-array zurückgeben?

    was i damit gemeint hab ist: wie muss ich obiges beispiel umändern, damits funktioniert? wie geb ich in c++ a pointer-array zurück? durch das jahrelange c# hab i irgendwie 's programmieren verlernt 😉



  • Konrad Rudolph schrieb:

    Julian__ schrieb:

    du müsstest in stringArray() vor note[..] = ... immer ein "sternchen" setzen, z.B.
    *note[0] = new string( "hallo1" );

    logisch, da du ja einen "doppelzeiger" hast (zeiger auf zeiger), musst du auch doppelt dereferenzieren.

    Das klappt nicht, dann bräuchte er Dreifachzeiger. Der "Doppelzeiger" in der Typensignatur geht ja schon für das C-Array rauf.

    ...stimmt, sorry. ich hatte es nur schnell überflogen und gleich die erstbeste (und -dümmste) idee gepostet.

    mfg,
    julian



  • Dein Rückgabetyp ist schon korrekt. Du mußt nur dein Array anders erstellen.

    // statt
    string *note[5];
    // dann
    string** note = new string*[5];
    

    Ich würde hier aber lieber einen vector nehmen.



  • warum nicht einen vector<string> verwenden ?



  • sagte ich doch. 🙂



  • Braunstein schrieb:

    Du mußt nur dein Array anders erstellen.

    das war's, danke vielmals!!

    Braunstein schrieb:

    Ich würde hier aber lieber einen vector nehmen.

    hast schon recht, aber solche fehler lassen mi dann doch net ruhig schlafen - weil i mir denk "das muss doch gehen"... ging mir auch ein wenig ums prinzip bei der frage.



  • iko79 schrieb:

    ...- weil i mir denk "das muss doch gehen"... ging mir auch ein wenig ums prinzip bei der frage.

    Gründlichkeit: Guter Ansatz für einen Programmierer !
    (Wenn er dann zusätzlich noch "schnell zusammenhauen" kann, ist er perfekt 😉 )

    Gruß,

    Simon2.



  • iko79 schrieb:

    das war's, danke vielmals!!

    Bei diesem Ansatz aber bitte noch an ein delete[] an passender Stelle denken.


Anmelden zum Antworten