new im vgl zu malloc/realloc



  • Hallo!

    Ich habe ein kleines Problem. Ich weiss sehr wohl, dass man mit new Speicher freigibt, nun habe ich aber folgende Frage/folgendes Problem:

    Ich will bspw. aus deinem Textfile irgendwelche Daten in einen Array einlesen, nun weiss ich nicht wie viele Daten das sind, in C würde ich erstmal mit malloc speicher freigeben und bei jedem durchlauf den Speicher mit realloc vergrößern... Was übernimmt jetzt bei c++ die funktino von realloc?

    Hoffe das ist nicht zu simpel...



  • Probier es doch mal mit ner anderen Datenstruktur, wie ner Liste, nem Vektor, nem Stack,...! Da solltest du das Problem garnicht haben.



  • Ich habe ein kleines Problem. Ich weiss sehr wohl, dass man mit new Speicher freigibt, nun habe ich aber folgende Frage/folgendes Problem:

    Ich will bspw. aus deinem Textfile irgendwelche Daten in einen Array einlesen, nun weiss ich nicht wie viele Daten das sind, in C würde ich erstmal mit malloc speicher freigeben und bei jedem durchlauf den Speicher mit realloc vergrößern... Was übernimmt jetzt bei c++ die funktino von realloc?

    Hoffe das ist nicht zu simpel...

    Du gibst den Speicher nicht frei sondern besorgst ihn dir.Freigeben geht mit delete bzw. free().

    In C++ würde man einen Container der STL verwenden. Dazu findest du bestimmt was in der FAQ oder mit der Suchenfunktion.



  • Hallo hubutz!

    Zunächst mal ein paar Definitionen, damit wir nicht durcheinander kommen 😉 :

    Mit new und malloc fordern wir Speicher an! Freigeben tun wir ihn wieder mit delete bzw. free.

    Und nun zu Deiner Frage: Es gibt für realloc keine Entsprechung in C++. Dir bleibt nichts anderes übrig, als mit new[] einen neuen Speicherbereich anzufordern, den Inhalt des bisherigen Speichers in den neuen zu kopieren und schließlich den alten Speicher wieder freizugeben.

    Gruß,

    Andreas



  • Und nun zu Deiner Frage: Es gibt für realloc keine Entsprechung in C++. Dir bleibt nichts anderes übrig, als mit new[] einen neuen Speicherbereich anzufordern, den Inhalt des bisherigen Speichers in den neuen zu kopieren und schließlich den alten Speicher wieder freizugeben.

    Araum einfach, wenns auch schwer geht, oder wie?

    Um mal die Möglichkeiten von C++ zu demonstieren:

    int main ()
    {
       vector<int> mein_Vektor;
    
       copy(istream_iterator<int>(cin), istream_iterator<int>(), back_inserter(mein_Vektor));   
    
       sort(mein_Vektor.begin(), mein_Vektor.end());
    
       copy(mein_Vektor.begin(), mein_Vektor.end(), ostream_iterator<int>(cout, " ");
    }
    


  • hi!
    danke für die antworten!
    ich hab halt am freitag ne c/c++ prüfung und wir haben new nur am rande angeschnitten, deshalb dachte ich, dass das vielleicht dran kommt! das mit new keinen speicher freigibt weiss ich, auch wenn ich das so geschrieben hab, ich hab schon das richtige gemeint...
    also vielen dank!


Anmelden zum Antworten