Einzelnen Beitrag anzeigen

TurboMartin

Registriert seit: 13. Feb 2006
Ort: Bad Honnef
765 Beiträge
 
Turbo Delphi für Win32
 
#1

AccsesViolation in System.pas

  Alt 2. Nov 2007, 19:01
Ich habe jetzt ein Problem:
Die System.pas aud D2007 crasht, das bedeutet, das ich immer eine AV erhalte.
Die Zelennummer ist 12345.
Delphi-Quellcode:
procedure _LStrAsg(var dest; const source);
{$IFDEF PUREPASCAL}
var
  S, D: Pointer;
  P: PStrRec;
  Temp: Longint;
begin
  S := Pointer(source);
  if S <> nil then
  begin
    P := PStrRec(Integer(S) - sizeof(StrRec));
    if P.refCnt < 0 then // make copy of string literal
    begin
      Temp := P.length;
      S := _NewAnsiString(Temp);
      Move(Pointer(source)^, S^, Temp);
      P := PStrRec(Integer(S) - sizeof(StrRec));
    end;
    InterlockedIncrement(P.refCnt);
  end;

  D := Pointer(dest);
  Pointer(dest) := S;
  if D <> nil then
  begin
    P := PStrRec(Integer(D) - sizeof(StrRec));
    if P.refCnt > 0 then
      if InterlockedDecrement(P.refCnt) = 0 then
        FreeMem(P);
  end;
end;
{$ELSE}
asm
        { ->    EAX pointer to dest   str      }
        { ->    EDX pointer to source str      }

                TEST EDX,EDX { have a source? }
                JE @@2 { no -> jump     }

                MOV ECX,[EDX-skew].StrRec.refCnt
                INC ECX
                JG @@1 { literal string -> jump not taken }

                PUSH EAX
                PUSH EDX
                MOV EAX,[EDX-skew].StrRec.length
                CALL _NewAnsiString
                MOV EDX,EAX
                POP EAX
                PUSH EDX
                MOV ECX,[EAX-skew].StrRec.length
                CALL Move
                POP EDX
                POP EAX
                JMP @@2

@@1:
           LOCK INC [EDX-skew].StrRec.refCnt

@@2: XCHG EDX,[EAX]
                TEST EDX,EDX //<-- da crasht es
                JE @@3
                MOV ECX,[EDX-skew].StrRec.refCnt
                DEC ECX
                JL @@3
           LOCK DEC [EDX-skew].StrRec.refCnt
                JNE @@3
                LEA EAX,[EDX-skew].StrRec.refCnt
                CALL _FreeMem
@@3:
end;
{$ENDIF}
Woher kommt das und wie ändere/behebe ich den Fehler?
Nach einem Debugen kamen plötzlich massenhaft Fehler:
Fehler

Erzeugen
[Pascal Fataler Fehler] system.pas(1748): F2051 Unit SysInit wurde mit einer unterschiedlichen Version von System.@RunError compiliert
[Pascal Fataler Fehler] system.pas(1748): F2051 Unit SysInit wurde mit einer unterschiedlichen Version von System.@RunError compiliert
[Pascal Fataler Fehler] system.pas(1748): F2051 Unit SysInit wurde mit einer unterschiedlichen Version von System.@RunError compiliert
[Pascal Fataler Fehler] system.pas(1748): F2051 Unit SysInit wurde mit einer unterschiedlichen Version von System.@RunError compiliert
[Pascal Fataler Fehler] system.pas(1748): F2051 Unit SysInit wurde mit einer unterschiedlichen Version von System.@RunError compiliert
[Pascal Fataler Fehler] system.pas(1748): F2051 Unit SysInit wurde mit einer unterschiedlichen Version von System.@RunError compiliert
[Pascal Fataler Fehler] system.pas(1748): F2051 Unit SysInit wurde mit einer unterschiedlichen Version von System.@RunError compiliert
[Pascal Fataler Fehler] system.pas(1748): F2051 Unit SysInit wurde mit einer unterschiedlichen Version von System.@RunError compiliert
[Pascal Fataler Fehler] system.pas(1748): F2051 Unit SysInit wurde mit einer unterschiedlichen Version von System.@RunError compiliert

Kann es die Prozedur TryStrToFloat sein, die den Fehler verursacht?
Mein Aufruf ist
TryStrToFloat(values1[l],dvalue1); values1 ist ein array of String und dValue1 ist Single.



[edit]
Es schein hier irgendwas nicht zu funktionieren...

Delphi-Quellcode:
for i := 0 to Length(values)-1 do
  begin
    if not odd(i) then
    begin
      values1[j] := values[i];
      j := j+1;
    end
    else
      begin
        values2[k] := values[i];
        k := k+1;
      end;
  end;
[/edit]
[edit=2]
der Übeltäter scheint j := j+1 zu schein. j ist ein Integer, aber ich verstehe nicht weshalb das nicht funktioniert.[/edit]
Tomorrow will be cancelled due to lack of interest.

  Mit Zitat antworten Zitat