kurze Newbiefrage zu new/delete
-
Ich hab folgendes Prog:
int main() { int size = 0; char *a = new char[]; cin>>a; while(!a[size] == '\0') size++; //Sagt wieviel Zeichen der Benutzer eingegeben hat cout<<size<<endl; return 0; };
Meine Frage ist wie kann ich den reservierten Speicher wieder löschen?
Und gibts noch Fehler in dem Prog?delete [] a; funzt net, bringt ne Verletzung während der Laufzeit
-
du sagst nicht, wie groß dein alloziierter buffer sein soll
char *a = new char[10]; //oder was du brauchst
-
!a[size] == '\0')
richtig wäre
a[size]!= '\0'
-
danke erstmal.
Aber was mach ich, wenn ich nur soviel Speicher reservieren will, wieviel der
Benutzer eigentlich brauch?dann könnte ich ja " char a[10] statt char a = new char [10] " schreiben.
ps:
!a[size] == '\0') funzt trotzdem *gg*, aber ich werde in Zukunft die andere
Version nehmen
-
geht noch kürzer:
while(a[size])
Er bricht automatisch die Schleife ab, wenn die Escapesequenz '\o' kommt.
Aber wie kann ich nur soviel Speicher reservieren, wie der Benutzer auch braucht?
Beispiel:
Benutzer gibt 5 Zeichen ein, dann soll die size eben nur 5 sein.
-
Du kannst Strings benutzen, wenn du in C++ programmierst.
Falls nicht, könntest du immer noch so etwas probieren:
Du schreibst eine while-Schleife, in der du versuchst, ein Zeichen aus cin einzulesen. Falls noch eins da ist, inkrementierst du einen Zähler.
-
hi,
also ich denke du solltest dir erst einmal speicher reservieren, eine definierte groesse, zb char *eingabe=new char[256], beachte sind nur 255 + \0 .
wenn du das gemacht hast gehst du in eine funktion die da lauten koennte:
char* reserviere(char* eingabe){
char* help=new char[strlen(eingabe)];
strcpy(help,eingabe);
delete[] eingabe;
return help;
}und die rufst du auf mit:
eingabe=reserviere(eingabe);waere meine idee, hab sie aber gerade nicht ausprobiert, sollte aber gehen.
gruss
msp