AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Zeigern

Ein Thema von praesident · begonnen am 29. Feb 2008 · letzter Beitrag vom 1. Mär 2008
Antwort Antwort
Seite 3 von 7     123 45     Letzte »    
praesident

Registriert seit: 29. Feb 2008
25 Beiträge
 
#21

Re: Problem mit Zeigern

  Alt 29. Feb 2008, 21:21
Zitat von DeddyH:
Wenn Du nil an die Funktion übergibst, kommt der Fehler eben an der besagten Stelle.
bitte entschuldigt, aber ich habe das auch nur von meinem lehrer vorgesetzt bekommen...und nun macht mal

hab das erst seit einer woche und wir hatten vorher nur mit pascal gearbeitet...

könntet ihr also für einen totalen delphi anfänger den fehler noch einmal zusammenfassen? und wenn es nicht allzu viel umstände macht noch einen kleinen programmcode als verbesserung?

wäre echt meine rettung, da mir das mit den zeigern in delphi nicht genauer erläutert wurde


danke
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#22

Re: Problem mit Zeigern

  Alt 29. Feb 2008, 21:30
beim aufruf deiner Funktion "push" hat zkopf den Wert nil
das heißt er zeigt auf keinen Speicher. Dementsprechend kracht es immer sobald du auf Untereigenschaften davon zugreifen willst. Wie bereits erwähnt empfehle ich dir das Video Pointerfun damit du ein Gespür für Pointer bekommst.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#23

Re: Problem mit Zeigern

  Alt 29. Feb 2008, 21:32
Ungetestet:
Delphi-Quellcode:
PROCEDURE push(VAR zkopf:tzeiger;inhalt:char);
VAR zhilf, zneu:tzeiger;
BEGIN
  //erstes Element soll angelegt werden
  if zkopf = nil then
    begin
      new(zhilf);
      zhilf^.inhalt := inhalt;
      zhilf^.next := nil;
    end
  //eine weiteres Element soll angehängt werden
  else
    begin
      zhilf:=zkopf;
      while (zhilf <> nil) and (zhilf^.next <> nil) do
          zhilf:=zhilf^.next;
      new(zneu);
      zneu^.inhalt:=inhalt;
      zneu^.next:=NIL;
      zhilf^.next:=zneu;
    end;
  zkopf := zhilf;
END;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
praesident

Registriert seit: 29. Feb 2008
25 Beiträge
 
#24

Re: Problem mit Zeigern

  Alt 29. Feb 2008, 21:36
Zitat von DeddyH:
Ungetestet:
Delphi-Quellcode:
PROCEDURE push(VAR zkopf:tzeiger;inhalt:char);
VAR zhilf, zneu:tzeiger;
BEGIN
  //erstes Element soll angelegt werden
  if zkopf = nil then
    begin
      new(zhilf);
      zhilf^.inhalt := inhalt;
      zhilf^.next := nil;
    end
  //eine weiteres Element soll angehängt werden
  else
    begin
      zhilf:=zkopf;
      while (zhilf <> nil) and (zhilf^.next <> nil) do
          zhilf:=zhilf^.next;
      new(zneu);
      zneu^.inhalt:=inhalt;
      zneu^.next:=NIL;
      zhilf^.next:=zneu;
    end;
  zkopf := zhilf;
END;
super danke...schon mal kein fehler

werd mir das mal genauer anschauen, damit ich verstehe, warum bei mir immer der Fehler erzeugt wurde...

danke nochmal für eue hilfe
  Mit Zitat antworten Zitat
Macci

Registriert seit: 31. Mai 2007
129 Beiträge
 
#25

Re: Problem mit Zeigern

  Alt 29. Feb 2008, 21:40
Stimmt, daran dass zkopf schon mit nil übergeben wird, habe ich gar nicht gedacht

@DeddyH:

Hier
Delphi-Quellcode:
 while (zhilf <> nil) and (zhilf^.next <> nil) do
          zhilf:=zhilf^.next;
ist die erste Abfrage (zhilf<>nil) unnötig
zhilf kann ja nie nil werden.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#26

Re: Problem mit Zeigern

  Alt 29. Feb 2008, 21:42
Stimmt, war noch vom C&P übrig geblieben (schadet aber auch nicht)
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
praesident

Registriert seit: 29. Feb 2008
25 Beiträge
 
#27

Re: Problem mit Zeigern

  Alt 29. Feb 2008, 21:43
aber müsste nicht das:

  zkopf := zhilf; ganz vor, als letzte zeile der ersten fallunterscheidung?

sonst könnte ich ja nie mehr auf das erste element zugreifen!?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#28

Re: Problem mit Zeigern

  Alt 29. Feb 2008, 21:45
Durch diese Zuweisung hast Du immer das letzte Element der Liste in zkopf stehen. Soll das nicht so sein?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
praesident

Registriert seit: 29. Feb 2008
25 Beiträge
 
#29

Re: Problem mit Zeigern

  Alt 29. Feb 2008, 21:48
Zitat von DeddyH:
Durch diese Zuweisung hast Du immer das letzte Element der Liste in zkopf stehen. Soll das nicht so sein?
nein, eigentlich sollte es immer das erste sein...aber das ist ja eigentlich kein aufwand, oder?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#30

Re: Problem mit Zeigern

  Alt 29. Feb 2008, 21:52
Nö, ist kein Aufwand, dann mach es so, wie Du selbst schon gesagt hast:
Delphi-Quellcode:
PROCEDURE push(VAR zkopf:tzeiger;inhalt:char);
VAR zhilf, zneu:tzeiger;
BEGIN
  //erstes Element soll angelegt werden
  if zkopf = nil then
    begin
      new(zhilf);
      zhilf^.inhalt := inhalt;
      zhilf^.next := nil;
      zkopf := zhilf;
    end
  //eine weiteres Element soll angehängt werden
  else
    begin
      zhilf:=zkopf;
      while (zhilf <> nil) and (zhilf^.next <> nil) do
          zhilf:=zhilf^.next;
      new(zneu);
      zneu^.inhalt:=inhalt;
      zneu^.next:=NIL;
      zhilf^.next:=zneu;
    end;
END;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 7     123 45     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:40 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