FPC/Lazarus-ban random SIGSEGV errorokat kapok a class-jaimra. Pedig jól néznek ki a Complier se szól, csak amikor futnia kéne akkor meghal. Mi lehet a probléma?
példának okáért itt is van egy egszerűbb:
type Tsettings=class
values:array of array[0..2] of string;
loaded:boolean;
function get(mit:string):string;
function isSet(mit:string):boolean;
constructor load(filepath:string);
end;
function Tsettings.get(mit:string):string;
var i: word;
fund:boolean;
begin
if loaded then
begin
i:=low(values);
fund:=false;
Repeat
if Upcase(values[i,1]) = Upcase(mit) then fund:=True
else inc(i);
until fund or (i = High(values));
if fund then get:=values[i,2]
else get:='Error: 1';
end else get:='Error: 2';
end;
ha futnia kéne meghal, az "if loaded then" soron, ha kiveszem akkor pedig az "if Upcase(values[i,1]) = Upcase(mit) then fund:=True" soron
de itt egy másik is:
type
particles=class
may,miy:single;
pos:TVector3f; // ez egy típus amiben van egy x egy y és egy z ami single
speed:single;
constructor createfalling(py,ly,pspeed:single);
procedure update;
procedure render;
end;
procedure particles.update;
begin
if pos.y < miy then
begin
pos.x:=Random(512)-256;
pos.z:=Random(512)-256;
pos.y:=may;
end else begin
pos.y:=pos.y-speed;
end;
end;
itt pedig az "if pos.y < miy then" soron hal be.
úgy néz ki mintha az if-eken halna be, de más classok is vannak if-ekkel, és azok mennek, a másik meg hogy a class belső változóitól, de ugyanúgy, mások mennek vele.
a SIGSEGVről ezt találtam:
SIGSEGV = Segmentation Fault = Access Violation under Win
Common causes are;
-> miscalculating array ranges in your loops,
-> accessing objects when not created,
-> or just plain and simple trying to access memory that was not allocated for use.
nincs valakinek bármi építő ötlete, mert ez egy nagyon bosszantó error, amivel nem tudok mit kezdeni :(
Igen, de itt ebben a progiban, éppen az a lényeg, hogy olyan adatokkal tudjon dolgozni, amiket ő sem tud előre, és nincs beleprogramozva. Most tudok egy konkrétebb példát is hozni:
egy script tartalma, ami ha kell lefut:
- loadsettings xy.cfg xy (töltsük be az xy.cfg-t és adjuk neki az xy nevet (kivétel a settings.cfg az magától betöltődik) ) (ilyenkor az array of Tsettings eggyel növekszik)
- setlight xy.x xy.y xy.z xy.w (álítsunk be egy lámpát az xy-ban meghatározottak szerint)
de akár lehetne ez is:
- setlight xy.janibácsi xy.gjaogadgianda xy.nemY xy.tavolsag (ilyenkor ugye a .cfg-ben is ezek vannak (janibácsi=123) )
persze ez is csak egy példa, a script-be nyilván beleírják eleve az adatokat, de például a menüben nem tudni, hogy ki mit akar belerakni, és ott viszont ezekből a filek-ból kell meghatározni
ugyan azok az adatok, mint az előzőben csak más a nevük, azért, hogy több is lehessen belőle, annyi amennyire szüksége van a felhasználónak, és úgy határozza meg, ahogy az neki kényelmesé.
ezért kell a nevét is az értéknek string ként tárolni, és az alapján kikeresni. persze, ahogy nézem, ezt az ini-s cuccot, amit te írtál, át lehetne írni úgy hogy így legyen, meg is próbálom majd :) és köszönöm még egyszer :)
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!