mikrocontroller.net

Forum: PC-Programmierung Speicher anfordern mit "new"


Autor: Karlheinz Druschel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Tobi H. (tobi-) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: keks (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
char* szResult, szTemp;

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

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: keks (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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;

???

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stimmt, das muß es. Hab ich doch glatt übersehen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.