| Autor |
Beitrag |
kat1
      
Beiträge: 40
Win XP
D6 EntPr
|
Verfasst: Mi 02.07.03 13:56
Hallo,
also ich habe hier ein kleines Problem. Ich schreibe gerade an einer Erweiterung eines Programms, dass ursprünglich in Turbo Pascal geschrieben wurde und auch auf einem viel älteren System. Da ich das ganze als Windows-Anwendung haben möchte, bin ich auf Delphi umgestiegen und da das alte Programm lediglich Berechnungsfunktionen und Prozeduren enthält, sollte das ja auch möglich sein.
Habe jetzt aber folgendes Problem. In der Unit sind folgende Klassen Konstanten und Variablen für die ganze Unit definiert:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| const BfhMaxTerms = 200; nmax=50;
type ArrEx = array [0..nmax+200] of extended; Yvec=array [0..nmax+100] of extended; Yvecptr=^Yvec; ArrPtr=^ArrEx;
var n1A_r,n1B_r,n1B_i,n3A_r,n3A_i:Yvecptr; BfhMaxOrder, BfhMinOrder:integer; JaA,JfA,PsiA,chiA:ArrPtr; |
Diese Pointervariablen werden ja mit New() alloziert und mit Dispose() wieder frei gegeben. Nur irgendwie scheint es da ein Problem zu geben. Jedesmal, wenn ich das Prog ausführen wollte, bekam ich eine Zugriffsverletzung. Habe dann nur den Ort oder die Reihenfolge, in der New() und Dispose() auftauchen, geändert und dann lief es wieder. Jetzt bekomme ich die Fehlermeldung aber jedes mal wieder, wenn ich mein Prog weiterhin ändere. Wieder irgendwas umstellen und dann geht es wieder. Das ist doch nicht normal. Hat jemand schon mal ähnliche Probs gehabt oder sonst irgendwie eine Idee?
Vielen Dank in voraus
_________________ Mfg Uwe
Es ist eine Unsitte der Menschen, sich an alles zu gewöhnen.
|
|
Klabautermann
      

Beiträge: 6366
Erhaltene Danke: 60
Windows 7, Ubuntu
Delphi 7 Prof.
|
Verfasst: Mi 02.07.03 14:21
Hallo,
wichtig zu wissen, währe wo du NEW und DISPOSE aufrufst.
Wahrscheinlich hast du daführ ereignisse gewählt, die in beliebiger Reihenfolge aufgerufen werden können. Oder Stahen die in der selben Procedure?
Ein bisschen Code währe warscheinlich auch hilfreich.
Gruß
Klabautermann
|
|
kat1 
      
Beiträge: 40
Win XP
D6 EntPr
|
Verfasst: Mi 02.07.03 14:29
Hmm, ja klar war etwas ungeschickt von mir. nach einigem Testen bin ich jetzt darauf gestoßen, dass die Probs eigentlich alle in dieser Prozedur auftreten:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42:
| procedure Miecalc; var betar,betai : extended; i,j,k:integer; begin SetLength(MieParameter,Nl,4,50); new(JaA);new(JfA);new(PsiA); new(chiA); ; new(n3A_r);new(n3A_i); for i:=0 to Nl-1 do begin new(n1A_r);new(n1B_r);new(n1B_i); BfhMaxOrder:=trunc(WiscombeNumber[i])+100; BfhMinOrder:=trunc(WiscombeNumber[i])+50; BesselFractional (x[i],BfhMaxOrder,BfhMaxTerms,JaA,JfA); RicattiBesselCalculation(x[i]); betar:= RelRefrIndex[i,0]*x[i]; betai:= RelRefrIndex[i,1]*x[i]; calcn1A(x[i]); calcn1B(betar,betai); calcn3A(x[i]); for j:=0 to 3 do begin for k:=0 to 49 do MieParameter[i,j,k]:=0; end; for j:=1 to WiscombeNumber[i] do begin calc_anbn (j, RelRefrIndex[i,0], RelRefrIndex[i,1],MieParameter[i,0,j],MieParameter[i,1,j], MieParameter[i,2,j],MieParameter[i,3,j]); end; dispose(n1A_r); end; dispose(JaA);dispose(JfA); dispose(chiA); dispose(n3A_r);dispose(n3A_i); dispose(n1B_r);dispose(n1B_i); end; |
die auskommentierten Zeilen mit New() und Dispose() rühren noch von meinem Probieren her, d.h. mal lief es mit der einen Version, mal mit der anderen.
Ich hoffe, das hilft ein wenig weiter bei der Schilderung meines Problems.
_________________ Mfg Uwe
Es ist eine Unsitte der Menschen, sich an alles zu gewöhnen.
|
|
|