Dynamische Speicherzuweisung???



  • Stimmt...aber irgendwo gab s doch noch eine Sache, womit man die lokalen Variablen umgehen konnt, mit Hilfe von new...was war das noch?^^
    Oder irre ich mich da? Ich weiß, dass es noch einen Sinn von dynamischer Speicherzuweisung gab 🙂



  • Du könntest vor der Schleife einen Pointer erstellen, der die Adresse der variable bekommt, die in der Schleife erstellt worden ist. 😉

    beispiel:

    #define MAX_USERS 32 //Zum Beispiel
    CUserData *Zahl; //Pointer auf CUserData
    
    for(int i=0;i<MAX_USERS;i++)
    {
        Zahl = new CUserData[MAX_USERS];
    
         ...
    }
    


  • So wars 😉



  • ich benutze malloc und free. Habe aber gehört das new und delete besser sein sollen und fast das gleiche machen. wie funktionieren new und delete und an was muss ich mich umgewöhenen?

    mfg.



  • Eigentlich hab ich da Bullshit gemacht. ^^
    Würde die schleife wirklich 32 mal durchlaufen, würde 31mal ein CUserData objekt erstellt werden. 30 davon liegen unzugreifbar im Speicher rum, während nur die 31. wieder freigebbar ist.

    Keine Ahnung, aber irgendwie so ging das wohl. ^^ Muss man wohl mit nem if oder so machen:

    #define MAX_USERS 32 //Zum Beispiel
    CUserData *Zahl; //Pointer auf CUserData
    
    for(int i=0;i<MAX_USERS;i++)
    {
    if(i=MAX_USERS)
        Zahl = new CUserData[MAX_USERS];
    else
         ...
    }
    


  • Ich glaube malloc und free benutzt man bei arrays? Aber ehrlich gesagt kenn ich den Unterschied auch nicht. 😉 Ist bestimmt sowas wie class und struct, vom Prinzip das Selbe nur kleine aber feine Unterschiede.



  • Perner schrieb:

    #define MAX_USERS 32 //Zum Beispiel
    CUserData *Zahl; //Pointer auf CUserData
    
    for(int i=0;i<MAX_USERS;i++)
    {
        Zahl = new CUserData[MAX_USERS];
    
         ...
    }
    

    Auch nicht gerade ein gutes Beispiel. Du hast nach der Schleife zwar noch einen gültigen pointer auf ein array von CUserData. Trotzdem sind dir ein paar abhanden gekommen ( wenn MAX_USERS > 1 ). Wenn du das array aber innerhalb der Schleife wieder freigibst machts wiederun keinen Sinn Zahl schon ausserhalb der Schleife zu deklarieren, da Zahl nach der Schleife nicht mehr gültig ist. 😉
    Kurt
    EDIT: Zu Spät bist schon selber draufgekommen



  • Nabend,

    Perner schrieb:

    Ich glaube malloc und free benutzt man bei arrays? Aber ehrlich gesagt kenn ich den Unterschied auch nicht. 😉 Ist bestimmt sowas wie class und struct, vom Prinzip das Selbe nur kleine aber feine Unterschiede.

    in C++ nutzt man 'new' und 'delete' bzw. fuer Arrays 'new type[limit]' und
    'delete[]'. Der Unterschied ist, dass 'new' den CTor des Objektes aufruft und
    'delete' den DTor. Das geschiet bei 'malloc' und 'free' nicht.

    Man sollte auch darauf achten, 'malloc', 'new', 'free' und 'delete' nicht zu
    mischen. Entweder benutzt man das eine oder das andere. Und wenn man mit Objekten
    arbeitet, kommt man um 'new' etc. nicht herum, den Grund dafuer habe ich
    bereits geschrieben.

    mfg
    v R



  • virtuell Realisticer schrieb:

    Man sollte auch darauf achten, 'malloc', 'new', 'free' und 'delete' nicht zu
    mischen.

    Wieso? Man kann ja new und delete für klassen nehmen und malloc und free für arrays. Oder nicht?

    mfg.



  • "Mischen" meinte sinngemäß dass Du kein Objekt mit new anlegen und mit free() freigeben sollst (oder vice versa)



  • LordJaxom schrieb:

    "Mischen" meinte sinngemäß dass Du kein Objekt mit new anlegen und mit free() freigeben sollst (oder vice versa)

    Achso. Okay, alles klar.

    mfg.



  • joomoo schrieb:

    virtuell Realisticer schrieb:

    Man sollte auch darauf achten, 'malloc', 'new', 'free' und 'delete' nicht zu
    mischen.

    Wieso? Man kann ja new und delete für klassen nehmen und malloc und free für arrays. Oder nicht?

    mfg.

    Abgesehen davon, dass du meinst man solle new/delete für Klassen/Strukturen verwenden, und malloc/free für built-ins nehmen, kann man mit new[] auch dyn. Arrays anlegen und mit delete[] wieder freigeben.
    Aber warum sollte ich in C++ noch malloc nehmen?


Anmelden zum Antworten