Frage zu "delete"



  • Hey,
    kann mir bitte jemand erklären, warum ich das mit new erzeugte char-Array nicht mit delete außerhalb der Funktion entfernen kann? 🙂

    #include <iostream>
    
    char *strdublikat (const char*);
    
    int main (void) {
    	const char* TEXT = "Das ist ein Text";
    	char* dubl = NULL;
    	dubl = strdublikat ( TEXT );
    
    	int i = {0};
    	while (*dubl) {
    		std::cout << dubl[i];
    		dubl++;
    	}
            // delete [] ptr funktioniert nicht!
    	std::cin.get();
    	return 0;
    }
    
    char *strdublikat (const char* s) {
    	char *ptr = new char[40];
    	char *ptr1 = ptr;
    	while (*ptr1++ = *s++);
    	return ptr;
    }
    


  • in der while im main veränderst du "dubl", dann zeigt es beim löschen nciht mehr auf den anfang des tatsächlichen arrays.

    dein rumgebastel da mit strings, pointern und new/delete ist ziemlich instabil und unnötig, schau dir die stl an.



  • Ich habe mich mit der STL noch nicht beschäftigt, weil ich erst die Sprachelemente an sich lernen will. Dankeschön für die Antwort 🙂



  • das ist wirklich schwierig zu lesen!

    Gewöhn dir an, wenn du mit Zeigern arbeitest, das so einfach wie möglich zu halten, sonst bekommst du schnell ziemlich große Probleme.

    Abgesehen davon ist dir in deinem Programm ein Fehler unterlaufen, der von Hackern ausgenutzt werden kann sofern der String von außen ans Programm übergeben wird. Stichwort Buffer overflow.

    Starte mal den Debugger und schau, was passiert, wenn du die Funktion mit verschiedenen Strings aufrufst. Mach den String einmal sehr lang, dann wirst du einen Speicherzugriffsfehler bekommen und das Programm stürzt ab.

    char *strdublikat (const char* s) {
        char *ptr = new char[40];
        char *ptr1 = ptr;
        while (*ptr1++ = *s++);
        return ptr;
    }
    

    Bei der Zeile int i = {0}; hast du wohl eher gemeint int i = 0;


Anmelden zum Antworten