Lokale Variable als Rückgabewert. Wie?



  • Wie schon gesagt habe ich nicht all zu viel Erfahrung, jedoch habe ich es mit dem Heap gelöst. Meine Fragen nun:

    1. ist folgender Code korrekt?:

    char* str=new char[index];
    

    2. Muss ich da nciht nochmal irgendetwas delten?
    3. Hat diese Methode irrgendwelche Nachteile?



  • 1.) Ja, der Code ist korrekt. Ich hoffe aber du hast nicht vergessen ein Byte zusätzlich für das abschliessende Nullbyte mitzuzählen. 🙂

    2.) Ja, "irgendjemand" muss diesen allokierten String nach Gebrauch (?!?) wieder löschen. :p

    3.) Ja, siehe 2.) 😞

    Wegen 3.) empfehle ich, wie schon Jester, die Verwendung von std::string. Das sollte für C++-Programmierer selbstverständlich sein. 😉

    mfg JJ



  • Je nachdem was du machst, kannst du auch einfach nen static puffer (wie bereits erwähnt) verwenden,
    allerdings sind die Daten darin nur bis zum nächsten Funktionsaufruf gültig.

    Aber wenn das reicht ist es ne saubere Lösung 🙂



  • Ich weiß nicht... so sauber finde ich das nicht. Man kann die Funktion dann nichtmehr zweimal in einem Ausdruck verwenden:

    erg = irgendeineFunktion(dieFunktion(param1), dieFunktion(param2));

    wird damit nicht funktionieren. Das ist schon etwas merkwürdig und widerspricht allem was man so üblicherweise von Funktionen erwarten würde.



  • Vielen Dank soweit hat sich dann alles erledigt.
    Falls es jemanden interessiern sollte, bleibe ich bei der Heap Lösung. Das deleten ist ein verkraftbarer Nachteil 😉
    Also nochmal Vielen Dank.



  • Der moderne Mann(/Frau) nimmt Smart-Pointer für solche Fälle. 😃 😉 😃

    mfg JJ



  • Mal eine Anmerkung:

    Wenn ihr das mit dem "new" so meint:

    char *Func(void)
    {
    
     char *A = new char[88];
    
     return A;
    }
    

    Geht das doch eigentlich nicht wirklich gut, d.h. der Speicher ist danach nicht mehr "accesible", oder etwa nicht?



  • wieso sollte er nicht mehr accesible sein? Selbst angelegter Speicher auf dem Heap ist meines Wissens nach immer ansprechbar...

    Mfg, smasher1985



  • Ich hab da was verwechselt, sorry. Der Speicher ist natürlich noch ansprechbar.

    Grüße
    Jens



  • Hi evrybody
    Did somebody used the files nrtypes_nr.h nrtypes.h in which if defind the class Vec_DP.
    I am writing a program in which I am using a variables and a functions of type Vec_DP.
    During the execution at some step the program stop because of error into the DBGHEAP.C file and exactly into the function _nh_malloc_dbg did somebody had the same problem.
    It is interesting to try the

    #include "nrtypes_nr.h"
    main(){
    for(;;){
    Vec_DP var(3);
    }
    }
    

    after a some number of iteration the program shold exit with an error into _nh_malloc_dbg ()
    I have any idea how to solve this problem 😞 can somebody help me

    Thanks.


Anmelden zum Antworten