Forum: PC-Programmierung Speicher anfordern mit "new"


von Karlheinz Druschel (Gast)


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

von Tobi H. (tobi-) Benutzerseite


Lesenswert?

Mit new ist nichts flasch. Mit deinem restlichen Code wahrscheinlich
aber. Vllt schreibst du in die Arrays auch zu viel rein? Lässt sich so
leider nicht sagen

Das etwas zu groß für den Stack ist hatte ich noch nicht, und das bei
wesentlich größeren Arrays

von Rolf Magnus (Gast)


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?

von keks (Gast)


Lesenswert?

char* szResult, szTemp;

szResult = (char *) new char[30];
szTemp = 'A';

von Rolf Magnus (Gast)


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.

von Thomas (Gast)


Lesenswert?

Was bitte soll der C-Style-Cast mit new? Mit new allokierter Speicher
bzw. der zugehörige Pointer hat bereits einen Typ, der muss nicht
gecastet werden.

von keks (Gast)


Lesenswert?

da hab ich wohl gerade von malloc geträumt. wollte nur zeigen dass
szTemp ein char ist.


und muss es bei arrays nicht heissen

delete[] szResult;

???

von Rolf Magnus (Gast)


Lesenswert?

Stimmt, das muß es. Hab ich doch glatt übersehen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.