char mit string.lenth() dynamisch erzeugen und mit delete speicher freigeben
-
Hallo zusammen,
ich habe folgendes Problem, sobald ich die Zeile mit dem delete in mein Programm schreibe, bekomme ich beim schließen des Programms eine Fehlermeldung.
Ich habe sowohl die FAQ, als auch das Forum durchsucht, finde aber keine Lösung.Die Schleife soll eine Datei zeilenweise einlesen den string in dem Array ch[]
zwischenspeichern. Weil die Zeilen unterschiedlich lang sind, muss das ganze dynamisch erfolgen.
Sieht irgendemand den Fehler?#include <fstream>
using namespace std;
.
.
.
.
while(getline(file,zeile) // hier wird eine Datei eingelesen
{
int zeilenlaenge=zeile.length();
char (*ch1) = new char [zeilenlaenge];
strcpy(ch1, zeile.c_str());
delete [] (ch1);
}Grüße
Sascha
-
Hallo,
warum verwendest du überhaupt char-Arrays, wo du doch mit den std::strings schon auf dem richtigen Weg bist?char (*ch1) = new char [zeilenlaenge]; strcpy(ch1, zeile.c_str());
Du allokierst ein Char zu wenig. length() gibt dir die Länge des Strings ohne die Nullterminierung zurück. strcpy kopiert den String inklusive Nullterminierung.
Demzufolge:char *ch = new char [zeilenlaenge + 1]; strcpy(ch1, zeile.c_str());
-
Danke,
und das hat mich jetzt 4 Stunden gekostet!Grüße Sascha