Speicher anfordern mit "new"

Gast #386901
Lesenswert?

Hi Leuts,

ich habe hier ein kleines Programm mit folgenden 2 Zeilen:

char szResult[30], szTemp[20];

Funktioniert im Prinizp, aber ab und zu bekomme ich die Meldung "Stack
arround szTemp was corrupted".
Ok, denke ich also mal die 50 Bytes sind zu gross fuer den Stack, legen
wir sie also ausserhalb des Stacks an:

char* szResult, szTemp;
...
szResult = new char[30];
szTemp = new char[20];
..
delete szTemp;
delete szResult;

Ergebnis: Die gleiche Fehlermeldung kommt jetzt immer!!

Also probierte ich ausserhalb der Funktion:
static char szTemp[20];
static char szResult[30];

Nun gehts...
Wasx habe ich bei der "new" Anweisung falsch gemacht ?

Greets
Karlheinz
Gast #386903
Lesenswert?

> Ok, denke ich also mal die 50 Bytes sind zu gross fuer den Stack,

Mit Sicherheit nicht.

> char* szResult, szTemp;
> ...
> szResult = new char[30];
> szTemp = new char[20];
> ..
> delete szTemp;
> delete szResult;
>
> Ergebnis: Die gleiche Fehlermeldung kommt jetzt immer!!

Der Fehler wird vermutlich im '..' liegen.

> Also probierte ich ausserhalb der Funktion:
> static char szTemp[20];
> static char szResult[30];
>
> Nun gehts...

Ich vermute, das ist nur Pech. Der Fehler wird immer noch drin sein,
aber im Moment unerkannt bleiben und geduldig warten, bis der den
größtmöglichen Schaden anrichten kann, um zuzuschlagen.

Übrigens: Warum nimmst du nicht einfach std::string oder eine andere
Stringklasse?
Gast #386905
Lesenswert?

Den Cast solltest du weglassen, der bringt nichts. Der Typ ist bereits
char*. Außerdem sollte man in C++ auf die C-Stil-Casts verzichten.
Außerdem verstehe ich den Bezug zu Karlheinz' Posting nicht.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren