Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.780 Beiträge
 
Delphi 12 Athens
 
#5

AW: Was hatet ihr von diesem Code?

  Alt 2. Jul 2024, 13:35
Seit ein paar Delphi-Versionen ist die Bereichsprüfung standardmäßig aktiv.
[0..0] oder [1..1] gibt es öfters, aber bei größerem Index knallen diese Prüfungen.

Tipp: [1 .. MaxInt div SizeOf(MIB_IPADDRROW)] of MIB_IPADDRROW;
Alternativ die Pointer-Arithmetic aktivieren
und anstatt PMIBIpAddrTable = ^TMIBIpAddrTable;
ein PMIBIpAddr = ^MIB_IPADDRROW; , welches sich auch via .table[k] zugreifen lässt.

Achtung, da beginnt es mit Index 0, also so als wäre es [0..x]

Und wenn 0, dann beim for k := 0 to pIpTable^.dwNumEntries - 1 do aufpassen, da dwNumEntries ein DWORD ist und es somit Probleme gibt, wenn dwNumEntries 0 wäre, da bei -1 dann 4 Millarden, anstatt -1 rauskommt.
OK, zum Glück ist heutzutage standfardmäßig die Überlaufprüfung aktiv und würde bei 0 - 1 schön knallen.

Also besser to Integer(pIpTable^.dwNumEntries) - 1 do (größer als 2 Milliarden wird dwNumEntries hoffentlich nie sein)
oder vorher ein if pIpTable^.dwNumEntries > 0 then for ... .
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 2. Jul 2024 um 13:43 Uhr)
  Mit Zitat antworten Zitat