Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Unter welchen Umständen kann diese Funktion eine AV auslösen (https://www.delphipraxis.net/50633-unter-welchen-umstaenden-kann-diese-funktion-eine-av-ausloesen.html)

Pseudemys Nelsoni 28. Jul 2005 17:33


Unter welchen Umständen kann diese Funktion eine AV auslösen
 
Siehe Topic.

Hier die Funktion:

Delphi-Quellcode:
function TUsers.UserByNickname(const Nickname: string): TUser;
var
  I: Integer;
begin
  Result := nil;
  for I := FUserList.Count-1 downto 0 do
    if CompareText(TUser(FUserList.Items[I]).FNickname, Nickname) = 0 then
      Result := TUser(FUserList.Items[I]);
end;
Ich bekomme hier manchmal eine AV, weiss nur nicht woran das liegt. In FUserList sind, wenn vorhanden, NUR Objekte der Klasse TUser enthalten. Theoretisch dürfte hier doch kein Fehler auftreten oder?

[edit=Luckie]Zitat-Tags durch Delphi-Tags ersetzt. :roll: Mfg, Luckie[/edit]

Edit: Danke, wollts gerade auch machen :thumb:

Luckie 28. Jul 2005 17:39

Re: Unter welchen Umständen kann diese Funktion eine AV ausl
 
ich sehe da nichts. Aber warum machst du weiter, wenn du den User mit den passenden Nicknamen gefunden hast?
Delphi-Quellcode:
function TUsers.UserByNickname(const Nickname: string): TUser;
var
  I: Integer;
begin
  Result := nil;
  for I := FUserList.Count-1 downto 0 do
  begin
    if CompareText(TUser(FUserList.Items[I]).FNickname, Nickname) = 0 then
    begin
      Result := TUser(FUserList.Items[I]);
      break; // <== !!!
    end;
  end;
end;

Pseudemys Nelsoni 28. Jul 2005 17:43

Re: Unter welchen Umständen kann diese Funktion eine AV ausl
 
Danke, habs nun drinnen, hatte es draussen gelassen, da ich denke, das jeder User gleichschnell gefunden werden sollte, anstatt das der letzte User am schnellsten und dementsprechend der erste User am langsamsten gefunden wird.

Luckie 28. Jul 2005 17:47

Re: Unter welchen Umständen kann diese Funktion eine AV ausl
 
Zitat:

Zitat von Pseudemys Nelsoni
Danke, habs nun drinnen, hatte es draussen gelassen, da ich denke, das jeder User gleichschnell gefunden werden sollte

:tongue:
Gleichberechtigung für alle oder nennt sich das 'demokratisches Programmieren'? :mrgreen:

SirThornberry 28. Jul 2005 18:37

Re: Unter welchen Umständen kann diese Funktion eine AV ausl
 
das ganze kann zu einer AV führen wenn FUserList.Items[I] nicht vom Typ TUser ist oder eben nil.
Es kann allerdings auch sein das du an einer ganz anderen stelle im programm speicher überschreibst und sich das erst an dieser stelle auswirkt. desweiteren kann FUserList auch nil sein bzw. schon zerstört (mit Free).

Pseudemys Nelsoni 28. Jul 2005 18:57

Re: Unter welchen Umständen kann diese Funktion eine AV ausl
 
Genau so nennt es sich, Luckie :-D

@SirThornberry: Wie gesagt, ich adde dort 100% nur Objekte der Klasse TUser und "FUserList.Items[I]" kann nicht nil sein, da die Schleife sonst nicht ausgeführt werden würde.

Luckie 28. Jul 2005 19:02

Re: Unter welchen Umständen kann diese Funktion eine AV ausl
 
Zitat:

Zitat von Pseudemys Nelsoni
"FUserList.Items[I]" kann nicht nil sein, da die Schleife sonst nicht ausgeführt werden würde.

Stimmt, da würde es vorher schon crashen. Ein Abfrage vor der Schleife
Delphi-Quellcode:
if Assigned(FUserLsit) then
wäre bestimmt sinnvoll.

GuenterS 28. Jul 2005 19:05

Re: Unter welchen Umständen kann diese Funktion eine AV ausl
 
Zitat:

Zitat von Pseudemys Nelsoni
Genau so nennt es sich, Luckie :-D

@SirThornberry: Wie gesagt, ich adde dort 100% nur Objekte der Klasse TUser und "FUserList.Items[I]" kann nicht nil sein, da die Schleife sonst nicht ausgeführt werden würde.

Wie kommst Du da drauf?

Wenn FUserlist nil ist hast deine erste AV, weil Du da ja schon auf das Porperty Count zugreifst.

derpepe 28. Jul 2005 19:13

Re: Unter welchen Umständen kann diese Funktion eine AV ausl
 
Zitat:

Zitat von Pseudemys Nelsoni
Genau so nennt es sich, Luckie :-D

Man braucht ja auch Raum für spätere Optimierungen! :P

Pseudemys Nelsoni 28. Jul 2005 19:17

Re: Unter welchen Umständen kann diese Funktion eine AV ausl
 
@Luckie: Das Objekt "FUserList" ist die ganze "Lebenszeit" des Programms verfügbar, d.h ich rufe Create und auch Destroy in der Hauptklasse auf. Also FUserList ist auf jedenfall existent. Theoretisch dürfte es also keine Probleme machen oder?

MfG und danke für die Antworten.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:30 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz