neu, löschen, malloc & kostenlos

Lesezeit: 2 Minuten

neu loschen malloc kostenlos
Vijay

Diese Frage wurde mir in einem Interview gestellt:

In C++,

  1. Was ist, wenn wir Speicher mit zuweisen malloc und verwenden delete um diesen zugewiesenen Speicher freizugeben?
  2. Was ist, wenn wir den Speicher mit zuweisen new und befreie es mit free?

Was sind die Probleme, denen wir begegnen würden, wenn die oben genannten Dinge im Code verwendet werden?

Meine Antwort war, es gibt keinen Unterschied. Hatte ich das richtig gesagt?

  • Dies FAQ beantwortet genau diese Fragen.

    – Naveen

    6. Juli ’10 um 7:03

  • verwandt: stackoverflow.com/questions/1350819/c-free-store-vs-heap

    – Nick Dandoulakis

    6. Juli ’10 um 7:08

  • Ich hoffe du hast die anderen Fragen richtig beantwortet

    – ereOn

    6. Juli ’10 um 7:38

  • “es gibt keinen Unterschied.” -> Das ist technisch korrekt, beide Punkte führen zu undefiniertem Verhalten, also kein Unterschied 🙂

    – Fredoverflow

    6. Juli ’10 um 7:55

  • Da es sich um eine Interviewfrage handelte, haben sie meiner Meinung nach keine Ja/Nein-Antwort erwartet. Von Ihnen wurde erwartet, dass Sie erklären, was malloc/free und new/delete bewirken, wie sie sich unterscheiden, wie sie verwendet werden und warum Sie sollten sie nicht mischen. Dies zeigt ihnen, dass Sie wissen, wie die C++- und C++-Laufzeit funktioniert, wie sie mit der C-Standardbibliothek zusammenhängt und dass Sie über diese Probleme nachdenken können. Beantworten Sie Ihre Frage also mit “Antwort […] es gibt keinen Unterschied” du hast versagt. 🙁

    – Tomek Szpakowicz

    6. Juli ’10 um 8:37

Wenn Sie dies tun, werden Sie auf undefiniertes Verhalten stoßen. Versuchen Sie das nie. Obwohl new könnte umgesetzt werden durch malloc() und delete könnte umgesetzt werden durch free() es gibt keine garantie, dass sie wirklich so umgesetzt werden und auch der Benutzer kann überlasten new und delete nach seinem Ermessen. Sie riskieren, auf Heap-Korruption zu stoßen.

Ansonsten vergiss das nicht, wenn du anrufst malloc() Sie erhalten Rohspeicher – kein Konstruktor wird aufgerufen – und wenn Sie aufrufen free() es wird kein Destruktor aufgerufen. Dies kann ebenfalls zu undefiniertem Verhalten und Fehlfunktionen des Programms führen.

Die Quintessenz ist… tue das niemals.

1) Undefiniertes Verhalten, wird aber wahrscheinlich “funktionieren”. Destruktoren werden aufgerufen, wenn der Speicher freigegeben wird, der wahrscheinlich nicht dekonstruiert werden möchte.
2) Undefiniertes Verhalten, wird aber wahrscheinlich “funktionieren”. Destruktoren werden NICHT aufgerufen.

dh WENN es funktioniert, und es gibt keine Garantie dafür, dann wird es wahrscheinlich nur genau so funktionieren, wie es für grundlegende eingebaute Datentypen erforderlich ist.

.

382280cookie-checkneu, löschen, malloc & kostenlos

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy