Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi pointer auf falscher addresse? (https://www.delphipraxis.net/19493-pointer-auf-falscher-addresse.html)

dummer_info_schüler 4. Apr 2004 15:15


pointer auf falscher addresse?
 
Hallo!
Ich habe ´ne Prozedur geschrieben, damit eine Information als Pointer sortiert eingefügt wird und dann in ´nem stringgrid die Pointer-info´s dargestellt werden. Im Quelltext sind so an sich auch keine Fehler, aber wenn ich die prozedur aufrufe, kommt die Meldung
<Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 004040D6 in module 'Project1.exe'. Read of address 'FFFFFFFF'. Process stopped. Use Stop or Run to continue.>
Delphi-Quellcode:
procedure einfuegen (var name: TInfo; var s: zeiger);
var alt, neu, basis: zeiger;
begin
 basis:=s;
 alt:=nil;
 while (s <> nil) and (s^.info < name) do begin
    alt:=s;
    s:=s^.next;
 end;
 new(neu);
 neu^.info:=name;
 if alt= nil then begin
   neu^.next:=s;
   s:=neu;
 end else begin
   alt^.next:=neu;
   neu^.next:=s;
   if (basis <> nil) then s:=basis;
 end;
end;

procedure aktualisiere_stringgrid(var s: zeiger);
var i: integer;
begin
 i:=0;
 repeat
   inc(i);
   form1.stringgrid1.rowcount:=i+1;
   form1.stringgrid1.cells[0,i]:=l^.info;
   l:=l^.next;
 until l^.next= nil;
end;

procedure TForm1.Button1Click(Sender: TObject);
var name: string[30];
begin
  name:=inputbox('Einfügen','Was soll eingefügt werden?','');
  einfuegen(name,s);
  aktualisiere_stringgrid(s);
end;
Der zeiger ist so definiert:
Delphi-Quellcode:
type TInfo= string[30];
     zeiger= ^TElement;
     TElement = record
       info: TInfo;
       next: zeiger;
     end;
Ich hab jetzt überhaupt keine Ahnung, wo der Fehler sein soll... Hat jmd. von euch ´ne Idee?
Danke im Voraus!

Sanchez 4. Apr 2004 18:14

Re: pointer auf falscher addresse?
 
In welcher Zeile kommt der Fehler?

dummer_info_schüler 4. Apr 2004 18:17

Re: pointer auf falscher addresse?
 
der grüne Pfeil zeigt dann auf die Zeile
aktualisiere_stringgrid(s);
im Button1.click

Sanchez 4. Apr 2004 18:51

Re: pointer auf falscher addresse?
 
[quote="dummer_info_schüler"]
Delphi-Quellcode:
   form1.stringgrid1.cells[0,i]:=l^.info;
   l:=l^.next;
 until l^.next= nil;
end;
Was ist dieses l?
Den Parameter s, den du der Prozedur übergibst verwendest du gar nicht.
Mit F4 kannt du übrigens in die Funktion reinsteppen, dann siehst du in welcher Zeile der Fehler genau auftritt.

Alter Mann 6. Apr 2004 17:20

Re: pointer auf falscher addresse?
 
Hi dummer_info_schüler(?)

mach es einfach so:

Delphi-Quellcode:
procedure aktualisiere_stringgrid(var s: zeiger);
var
  i: integer;
begin
  i:=0;
  Alt := S;
  while Alt <> nil do
  begin
    form1.stringgrid1.rowcount  := i + 1;
    Form1.StringGrid1.Cells[0, i]:= S^.Info;
    Alt := S^.Next;
    inc(i);
  end;
end;
Und zum Lesen: "Das große Buch zu Turbo Pascal 6.0", Seite 262-276, 1991 Data Becker GmbH, ISBN 3-89011-322-2.

Gibt es auf jeden gutsortierten Trodelmarkt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:27 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