Der Martin: Fehlerhafter C++ Code

Beitrag lesen

Hi,

warum funktioniert folgender Code nicht?

was heißt das genau? Denn "funktioniert nicht" funktioniert nicht. Beschreibe doch bitte mal, ws dieser Codeausschnitt überhaupt tun soll. Für mich sieht da jedenfalls einiges verdächtig aus.

char* request = NULL;
char buffer[] = {"Hallo World!"};
char* p = NULL;

p = request;

An dieser Stelle ist p also immer noch NULL, weil request ja ebenfalls NULL war. Warum hast du p dann überhaupt gleich bei der Deklaration initialisiert? Nur der Ordnung halber? Okay, akzeptiert.

p += strlen(request);

Autsch. Was macht strlen(), wenn das übergebene Argument NULL ist? Eigentlich sollte dieser Fehlerfall berücksichtigt sein; dann würde ich erwarten, dass strlen() den numerischen Wert 0 liefert. Dann wäre p nach dieser Zeile aber immer noch NULL (denn NULL+0 = NULL).
Es kann aber auch sein, dass dieser Aufruf bereits eine Speicherschutzverletzung darstellt - dann nämlich, wenn strlen() stur versucht, die Länge des ab Adresse 0 (NULL) abgelegten Strings zu bestimmen.

for(unsigned short i = 0; i < strlen(buffer); i++) {
  *p = buffer[i];

und spätestens hier knallt's, weil du versuchst, den NULL-Zeiger p zu dereferenzieren und die resultierenden Adresse 0 zu beschreiben.

Meiner bescheidenen Meinung nach müsste der Code funktionieren, was er aber nicht tut.

Meiner bescheidenen Meinung nach _kann_ dieser Code nicht funktionieren[*].

So long,
 Martin

[*] funktionieren: Hier "ohne Fehler durchlaufen und ein sinnvolles Ergebnis liefern".

--
"Drogen machen gleichgültig."
 - "Na und? Mir doch egal."