Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Funktionisweise von []delete??

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
08.11.2005, 12:03 Uhr
rizi



folgendes problem wenn ich mit char* t = new char[xy] neuen speicherplatz allokiere und dann speichere ich etwas in den vektor und nachher möchte ich mit delete[] den speicherpaltz wieder freigeben,erhalte ich immer eine excption, es sei denn ich setze den pointer wieder auf die anfangsadresse, wie im untrigen beispiel. wieso ist das so???
lg rizi

hier das beispiel:


C++:
Char::Char(char val[]){ //Konstruktor d. Klasse Char
    int i=0;
    anz = strlen(val);
    text = new char[anz+1];//+1 ->'\0
    while(val[i] != '\0'){
        *text = val[i];
        ++text;
        ++i;
    }
    *text = '\0'; //String Ende
    text = &text[-anz];//Pointer auf Anfangsadresse setzen
}



mod edit: Benutze CPP Tags selber

Dieser Post wurde am 08.11.2005 um 12:09 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
08.11.2005, 12:17 Uhr
rizi



sorry, was genau bedeudet benutze cpp tags selber???
nicht bös sein bin ein absouter newbie!
lg rizi
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
08.11.2005, 12:50 Uhr
ao

(Operator)


Der Pointer, der von new zurückgegeben wird, hat eine doppelte Funktion:

Für dich ist es die Anfangsadresse des Speicherbereichs, auf dem du arbeiten kannst.

Fürs Betriebssystem ist es eine Referenznummer, mit der der Speicherblock in der Speicherverwaltung identifiziert wird. Du musst beim delete[] genau die Referenznummer zurückgeben, die du beim new erhalten hast, damit das BS weiß, welchen Speicherblock du freigeben willst - du könntest ja ein komplexeres Programm geschrieben haben, das mit mehreren Blöcken zugleich hantiert.

Dein Programm gibt irgendeine Nummer zurück, mit der das BS nichts anfangen kann, weil es diese Nummer nicht vergeben hat. Daher die Exception.

CPP-Tags bedeutet: Wenn du Quelltext postest, sollst du ihn in Cpp-Tags einschließen, damit er bei uns als Sourcecode formatiert erscheint (in Monospace-Font und mit etwas Syntax-Highlighting). Ist besser zu lesen. So gehts:

Einfach vor den Anfang des Sourcecodes
[ cpp ]
und hinters Ende
[ /cpp ]
schreiben, aber nicht so wie ich es hier vorgemacht habe, sondern ohne die Leerzeichen zwischen den eckigen Klammern. Dann sieht es so aus wie hier:

C++:
int main void(){ return 0; }



ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
08.11.2005, 13:01 Uhr
~rizi2
Gast


danke für die schnelle antwort
lg rizi
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
08.11.2005, 13:11 Uhr
Tommix




Zitat von ao:


C++:
int main void(){ return 0; }




Diese Form fehlt noch in virtuals FAQ-Beitrag .
- Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: