Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   TStringGrid - Zugriff auf Zellen jenseits von ColCount (https://www.delphipraxis.net/61419-tstringgrid-zugriff-auf-zellen-jenseits-von-colcount.html)

r_kerber 21. Jan 2006 11:10


TStringGrid - Zugriff auf Zellen jenseits von ColCount
 
Mir ist in einem Delphi-Programm Quellcode folgender Art aufgefallen:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  StringGrid1 := TStringGrid.Create(Self);
  with StringGrid1 do
  begin
    Name := 'StringGrid1';
    Parent := Self;
    Left := 450;
    Top := 100;
    Width := 500;
    Height := 300;
    TabOrder := 6;
    Objects[0,7] := Edit1;
    Cells [0, 7] := 'Das dürfte eigentlich gar nicht gehen... ' +
          IntToStr (RowCount);
  end;

end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  label2.Caption := StringGrid1.Cells[0,7];
end;
Nun wird aber ein StringGrid mit RowCount und ColCount = 5 erzeugt. Trotzdem liefert der Zugriff auf die 8. zeile keinen Fehler und RowCount ist immer noch 5. Fordert das StringGrid hier nun dynamisch weiteren Speicher an oder überschreibt es einfach Speicherbereiche? Letzteres wäre ja ein Boffer Overflow Problem...

r2c2 21. Jan 2006 11:32

Re: TStringGrid - Zugriff auf Zellen jenseits von ColCount
 
Guck doch einfach nach...

*schnell mal selber nachguckt*
Nee, kein Bug. Speicher wird dynamisch neu angefordert...

mfg

Christian

marabu 21. Jan 2006 11:33

Re: TStringGrid - Zugriff auf Zellen jenseits von ColCount
 
Hallo Rainer,

einen buffer overflow musst du hier wirklich nicht fürchten. Borland arbeitet beim StringGrid mit einer sparse matrix Implementierung - wie allgemein üblich. ColCount und RowCount definieren lediglich ein Fenster auf dieser Matrix. Du kannst die Fensterkoordinaten in deinem eigenen Code zur Prüfung verwenden.

Freundliche Grüße vom marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:58 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 by Thomas Breitkreuz