ist folgender code zulässig



  • char* buffer;
    new buffer[bla]
    delete [] buffer;
    // und jetz gleich nochmal aufm selben bufferso
    new buffer[bla]
    

    also in worten, zuerst buffer erstellen dann schließen und gleich wieder speicher anfordern



  • newdelnew schrieb:

    also in worten, zuerst buffer erstellen dann schließen und gleich wieder speicher anfordern

    Das ist aber nicht das, was du im Code machst.

    char* buffer;        // Deklariert nur einen Zeiger.
    new buffer[bla]      // Wenn ; dastehen würde, gäbe es ein Memoryleak, da Speicher
                         // angefordert wird, und kein Verweis darauf besteht
    delete [] buffer;    // ungültig, da buffer auf keinen Array-Speicher zeigt
    
    new buffer[bla]      // siehe oben
    


  • du weißt doch was ich meine 😣 natürlich habe ich ihn der Hektik das buffer = und; vergessen. Aber ist es zulässig speicher anzufordern zu löschen und nochmal am gleichen buffer anzufordern?


  • Administrator

    Wieso musst du hetzen? 🙂

    char* buffer = new char[bla];
    delete[] buffer;
    buffer = new char[bla];
    delete[] buffer;
    

    Ja, das ist gültig. Wieso sollte es nicht sein?
    Allerdings ist es ziemlich nutzlos, wieso sollte man sowas machen? Sehe überhaupt keinen Sinn.

    Grüssli



  • newdelnew schrieb:

    du weißt doch was ich meine 😣 natürlich habe ich ihn der Hektik das buffer = und; vergessen.

    Ach, man sollte also immer davon ausgehen, dass es nur Flüchtigkeitsfehler waren und der Fragende es schon wissen wird? Du hättest dir 10 Sekunden mehr Zeit nehmen können, um solchen Missverständnissen vorzubeugen. 🙄

    newdelnew schrieb:

    Aber ist es zulässig speicher anzufordern zu löschen und nochmal am gleichen buffer anzufordern?

    Ja.



  • Dravere schrieb:

    Allerdings ist es ziemlich nutzlos, wieso sollte man sowas machen? Sehe überhaupt keinen Sinn.

    Wenn man mit char* arbeitet, wird man vielleicht irgendwann das Bedürfnis haben, seinen angeforderten Speicherbereich neu zu dimensionieren. 🙂

    Zumindest unter der Annahme, dass es zwei verschiedene bla s sind. Wieder ein Grund mehr, sich ein bisschen Zeit für eine Fragestellung zu nehmen...


  • Administrator

    Nexus schrieb:

    Dravere schrieb:

    Allerdings ist es ziemlich nutzlos, wieso sollte man sowas machen? Sehe überhaupt keinen Sinn.

    Wenn man mit char* arbeitet, wird man vielleicht irgendwann das Bedürfnis haben, seinen angeforderten Speicherbereich neu zu dimensionieren. 🙂

    So wie ich ihn/sie verstanden habe, ging es hier darum, wirklich alle 4 Schritte direkt hintereinander zu machen. Aber kann sein, dass ich das falsch verstanden habe. 😉
    Denn wenn es nicht direkt hintereinander ist, dann scheint da wohl ein gewisses Grundlagenwissen zu fehlen.

    Sollten wir vielleicht noch auf std::vector hinweisen? Na ich mach es jetzt mal:
    http://www.cplusplus.com/reference/stl/vector/

    Nexus schrieb:

    Zumindest unter der Annahme, dass es zwei verschiedene bla s sind. Wieder ein Grund mehr, sich ein bisschen Zeit für eine Fragestellung zu nehmen...

    ACK

    Grüssli



  • Dravere schrieb:

    Sollten wir vielleicht noch auf std::vector hinweisen?

    Wenn wir gerade dabei sind, sollte auch std::string erwähnt werden, welcher mehr auf Zeichenketten spezialisiert ist:
    http://www.cplusplus.com/reference/string/string/


Anmelden zum Antworten