char *t= new char[4000] absturtz bei delete[] t; ???
-
Oh mein Gott, könnte es da viele Möglichkeiten geben

- [ cpp] Tags tun gut
- Einrückung auch
- Wasn das für ne Längenberechnung?
- *acBuf ist nicht initialisiert, wer weiss wo der erste strcat hinschreibt (garantiert nicht an die erste Position
)Ich schätze mal Punkt 4 sorgt für den Crash...
-
nach dem ich char *acBuf= new cahr[4000]; geschreiben habe ist es doch initialisiert oder? dann kann ich doch reinschreibehn
-
Sag halt mal, was das machen soll. new und delete machen daraus noch kein C++ Programm.
-
siehe code oben...
-
1. Fehler:
sizeof(double) garantiert nicht genug Specher um ein double in Textform zu speichern. Je nach größe der Zahl ist es zu wenig oder zu viel!2. Fehler:
Das selbe mit sizeof(int)Versuch es doch mal mit std::string zu basteln. Die Größe des von dir allokierten Speichers hat jedenfalls nichts mit der tatsächlich benötigten Größe zu tun.
-
hmm ok.. d.h. der absturt lieg definitiv daran das speicherbereich überschrieben wird?
-
In den allermeisten Fällen, ja...
Mit feld = new char[...] initialisierst Du feld, ja, aber nicht *feld. Will heissen in den 4000 Bytes steht Müll drin. Da strcat das Nullbyte sucht um den Punkt zu finden an dem der neue String angehängt werden soll, ist nicht garantiert, dass dieses Nullbyte überhaupt schon innerhalb dieser 4000 Bytes liegt.
-
aha.. d.h. ich muss das feld erst auf null setzen mit ne for schleife?
-
Eigentlich reicht das erste Zeichen. Alle str* Funktionen von ANSI C (womit wir eigtl. im falschen Forum sind
) suchen ein Nullbyte als Terminator und setzen auch immer ein neues (Ausnahmen sind z.B. strncpy wenn das Zielfeld zu klein ist), damit gilt der Bereich hinter dem ersten Nullzeichen als "frei", wobei Du auf die Länge selbst zu achten hast.char feld[10] = "hallo"; // feld enthält "hallo\0...." wobei "." alles sein kann strcat(feld, "lo"); // feld enthält "hallolo\0.." strcat(feld, "lola"); // *boom* feld enthält "hallololol" und irgendetwas dahinter ist jetzt kaputt
-
BorisProgger schrieb:
aha.. d.h. ich muss das feld erst auf null setzen mit ne for schleife?
Nein. LordJaxom hat einfach dein Programm nicht gelesen und gibt jetzt voreilig Antworten. Er hat offensichtlich übersehen, das strcat nicht die erste Operation ist, sondern vorher noch die Zeile
sprintf(acBuf,"Line %i\t %s Array: (%i)(%i) \n",iLine,pcVName,x,y);im Programm zu finden ist.