![]() |
Delphi-Version: 2010
Typecasting Stacküberlauf <code inside>
hallo. habe ich da etwas nicht verstanden? anscheinend...
wieso funktioniert button1 und bei button2 gibt es einen stacküberlauf? müssten doch beides 4-byte im speicher sein?!
Delphi-Quellcode:
danke + grüße
procedure TForm1.Button1Click(Sender: TObject);
var a: TRGBQuad; b: Cardinal; begin a.rgbBlue:=0; a.rgbGreen:=0; a.rgbRed:=255; a.rgbReserved:=0; b:=Cardinal(a); ShowMessage(IntToStr(b)); end; procedure TForm1.Button2Click(Sender: TObject); var a: TRGBQuad; b: array[1..640, 1..480] of Cardinal; begin a.rgbBlue:=0; a.rgbGreen:=0; a.rgbRed:=255; a.rgbReserved:=0; b[1, 1]:=Cardinal(a); ShowMessage(IntToStr(b[1, 1])); end; |
AW: Typecasting Stacküberlauf <code inside>
Wenn Du b einmal verkleinerst, funktioniert es dann?
|
AW: Typecasting Stacküberlauf <code inside>
Dein b hat eine Größe von 640*480*4 = 1.228.800 Byte und wird als lokale Variable auf dem Stack angelegt. Der Default für die maximale Stackgröße ist bei Delphi (XE) 1.048.576 Byte!
Besser so:
Delphi-Quellcode:
Allerdings ist b dann 0-basiert, also statt
b: array of array of Cardinal;
begin SetLength(b, 640, 480);
Delphi-Quellcode:
musst du dann
b[1, 1]
Delphi-Quellcode:
schreiben.
b[0, 0]
|
AW: Typecasting Stacküberlauf <code inside>
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:31 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz