char* auf Heap
-
Hallo Kollegen,
mich würde interessieren ob der folgende Code so OK ist. Außerdem würde ich gerne wissen, warum mit:
char * pBuffer = new( char[iLen + 1] ); reserviert werden muss.char * pBuffer = new( char[iLen] ); <-- So tritt bei delete( pBuffer ); ein Fehler auf - Warum?
Vielen Dank und Gruß Plastikman
void main() { const char * pData = "TEST"; const char * pCR = "\n"; int iLen = strlen(pData) + strlen(pCR); char * pBuffer = new( char[iLen + 1] ); strcpy(pBuffer,pData); strcat(pBuffer,pCR); printf(pBuffer); delete( pBuffer ); }
-
Du brauchst len-Bytes speicher für den Text in deinem String plus ein Byte
für die binäre Null an Ende. Diese markiert das Ende des Strings, damit
Funktionen, die den String auslesen, wissen, wo er zuende ist. Wenn du also
ein Byte zu wenig Speicher reservierst, schreibst du beim Schreiben über "deinen"
Speicher hinaus. Und was dann passiert, ist absolut undefiniert. Vielleicht
stürzt dein Progarmm sofort ab, vieleicht 300 Zeilen später, oder es passiert
Mein seltsamer Murks von dem du gar nix wissen willst.
-
Dieser Thread wurde von Moderator/in Shade Of Mine aus dem Forum ANSI C in das Forum C++ verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
OK vielen Dank... hatte es vergessen.
-
Hi,
es heißt wohl int main() mit return 0; zudem verwendet man in C++ in der Regel std::string.
char * pBuffer = new( char[iLen + 1] );
heißt
char * pBuffer = new char[iLen + 1];
Ob deine Version geht, weiß ich nicht mal.
MfG Eisflamme
-
Was spricht dagegen void main(){...} zu benutzen?
Was spricht dagegen es so zu schreiben?
char * pBuffer = new( char[iLen + 1] );
-
Hi,
void main(): http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&faq=main#Answ
new(char[x]): Valide, wie ich feststellen musste; üblicher ist aber new char[x].
MfG Eisflamme
-
ok ok - man lernt nie aus