return ohne delete[]



  • hey,

    wie war das nochmal?

    wenn ich speicher mit new[] angefordert habe, diesen aber nicht freigeben kann, wegen einem return passiert was ?



  • Der Speicher bleibt allokiert und frisst unnötigen RAM. Ein Memoryleak ist das. Der sollte nicht bewusst herbeigeführt werden. Wenn dies des öfteren Auftritt, kann es sein, dass du den Speicher damit zumüllst. Lösch es lieber ordentlich 😉

    Gruß



  • grml danke



  • weweqeq schrieb:

    wenn ich speicher mit new[] angefordert habe, diesen aber nicht freigeben kann, wegen einem return passiert was ?

    Wieso hindert dich ein return am Freigeben?

    Moderne Konzepte wie RAII machen dynamische Speicherverwaltung übrigens sehr komfortabel, damit sind kaum noch explizite Freigaben notwendig.



  • Weil ich in einer Funktion Speicher mittels new[] anfordere mit dem ich dann den Inhalt einer .txt einlese und diesen zurückgebe und ich da zu keinem return komme.

    // read a file into memory
    #include <iostream>
    #include <fstream>
    using namespace std;
    
    int main () {
      int length;
      char * buffer;
    
      ifstream is;
      is.open ("test.txt", ios::binary );
    
      // get length of file:
      is.seekg (0, ios::end);
      length = is.tellg();
      is.seekg (0, ios::beg);
    
      // allocate memory:
      buffer = new char [length];
    
      // read data as a block:
      is.read (buffer,length);
    
      is.close();
    
      cout.write (buffer,length);
    
      return 0;
    }
    

    Quelle: fstream C++ Reference

    Den Code hab ich halt in einer Funktion gekapselt.



  • nimm std::vector



  • Deswegen solltest du hier ja std::vector oder zumindest smart pointer einsetzen.



  • Du musst delete[] nicht in der Selben Funktion aufrufen in der du new[] verwendet hast.
    Wenn du den Text zurückgibst rufst du halt irgendwo delete[] auf sobald du den Text nicht mehr brauchst.
    Fals diese Funktion von der du redest eine Klassenmethode ist kannst du dies auch in den Destruktor machen lassen.

    Alternativ kannst du auch std::string verwenden und hängst die Neue Zeile halt immer wieder hinten dran.


Anmelden zum Antworten