Avatar billede kokoko Nybegynder
23. december 1999 - 00:51 Der er 5 kommentarer og
1 løsning

EStringListError

Davs folkens.

Et program som jeg er ved at lave kommer nogen gange med fejlen EStringListError, uden at sige hvor det går galt.
Men i hjælp står der også at det kan ske når man add'er en linje, hvordan kan man undgå det?!?!?
Avatar billede kokoko Nybegynder
23. december 1999 - 00:57 #1
hehe jeg ved ikke om det er fordi jeg er ved at være træt men nu kommer den sgu også med en besked der hedder EAccessViolation!
Jeg tror jeg holder nu, håber nogen gider prøve at komme med et svar!
Avatar billede erikjacobsen Ekspert
23. december 1999 - 07:09 #2
Kode?
Avatar billede kokoko Nybegynder
23. december 1999 - 23:28 #3
øhh det er nok ikke så nemt.. for selve programmet fylder cirka 3000 linjer...
men delphi siger heller ikke hvor helvede det går galt.
Avatar billede kokoko Nybegynder
23. december 1999 - 23:33 #4
En anden mærkelig ting er at den ikke går ned det samme sted hver gang.
Avatar billede delphi Nybegynder
24. december 1999 - 11:18 #5
Det tyder alvorligt på at du et eller andet sted arbejder med et object (TStringList?) som du enten ikke har oprettet (med Create) eller som er blevet frigivet (enten med Free eller ved at dens Owner er blevet frigivet).  Det er vel ikke sådan, at du har en form der ejer en StringList/Listbox eller så'en, som du arbejder med fra et andet sted i programmet.  Hvis nu denne form endnu ikke er oprettet eller evt. ER blevet nedlagt, så får du fejl af de typer du beskriver ovenfor.  Du er nok nødt til at gå programmet igennem for denne type fejl.
Det kan evt. også skyldes, at du placere objecter i en stringlist.  Nu kan jeg ikke lige huske det, men er der ikke noget med at en stringlist selv vil fjerne de objecter der er tilknyttet den, når stringlisten bliver frigivet.  Hvis dette er tilfældet, så vil rækkefølgen:

1- Opret et eller flere object variable.
2- Opret Stringlist
3- Placer objecterne i stringlisten.
4- "Arbejd" med listen. 
5- Nedlæg listen
6- "Arbejd" med et af objecterne fra pkt. 1. 
7- Frigiv object variablerne.

I dette tilfælde vil det gå galt i både pkt. 6 og 7 - AccessError, idet du arbeder med noget memory der er frigivet.
Alternativt vil frigivelse af objecterne mellem pkt 3 og 4 sandsynligvis udløse en StringList error af en eller anden art i pkt 4, idet listen nu vil arbejde med noget udefineret data.

Løsningen kan evt. være ikke at tilskrive objecter som:

Var
  Obj1 : TPersistent;
  Obj2 : TPersistent;
Begin
  Obj1 := TPersistent.Create;
  Obj2 := Obj1;
End;

Idet denne operation blot kopiere indholdet af nogle pointere, således at begge variable peger på samme memory område.  Istedet bør man anvende:

  Obj2.Assign(Obj1);  // Øhh- Skal Obj2 mon først være created (kan ikke huske det!)

Dette vil lave to "ens" kopier, men man kan stadig arbejde med Obj2, selv om Obj1 bliver nedlagt.

NiP
Avatar billede sjensen Nybegynder
24. december 1999 - 12:10 #6
En anden simpel mulighed kan være at du adresserer de enkelte linier i stringlisten med et index. F.eks, stringlist.strings[x] hvor x er et tal du tror peger på en linie.

Men.. Når man opretter en stringlist (create) er den tom og man skal først add'e linier til den før man kan adressere dem med [x].

Eks.

s := stringlist.create
stringa := s.strings[2]; /// vil give en fejl !!

skulle have været
s := stringlist.create
s.strings.add('bla'); // linie 0
s.strings.add('bla'); // linie 1
s.strings.add('bla'); // linie 2
stringsa := s.strings[2] // linie ok, stringsa er lig med 'bla';

sjensen
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester