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


Anmelden zum Antworten