AGB  ·  Datenschutz  ·  Impressum  







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

Parameterübergabe an Prozedur

Ein Thema von Lemmy · begonnen am 4. Sep 2012 · letzter Beitrag vom 5. Sep 2012
Antwort Antwort
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.380 Beiträge
 
Delphi 10.3 Rio
 
#1

Parameterübergabe an Prozedur

  Alt 4. Sep 2012, 19:58
Delphi-Version: 7
Hallo,

habe eine Prozedur mit folgendem symbolischen INhalt:

Delphi-Quellcode:

procedure DatenPruefen(const ID: Integer; VAR Bezeichnung: String; VAR Datum:TDateTime; VAR ID2: Integer; VAR ID3: Integer; Var Vektor: Array of Integer);
begin
...
end;

procedure DatenEintragen(ID: Integer; Bezeichnung: String; ID2: Integer, Datum: TDateTime);
begin
..
..
  DatenPruefen(ID, Bezeichnung, Datum, ID2, ID3, Vektor);
..
..
end;
Das Problem: WEnn ich am Prozeduraufruf DatenPruefen() den Inhalt und die Speicheradressen der Parameter anschaue, ist alles in Ordnung. WEnn ich mit F7 einen Schritt weiter gehe, sind die Parameter nach dem Daten Datum SChrott und die Speicheradressen sind anders (also innerhalb der Prozedur).

Was ich herausgefunden habe:
Die Speicheradresse von ID2 hat sich geändert. DIese zeigt beim EIntritt in die Prozedur auf die Speicheradresse des Datums +16 (vorher Speicheradresse Datum +76). Die Speicheradresse von ID3 zeigt nun auf die Adresse von ID2 und damit auch auf deren Inhalt, die restlichen Adressen zeigen auch auf andere Bereiche.

Was ich geprüft habe:
1. die Prozedur DatenPruefen ist nur intern in der Unit aufrufbar, es gibt im Projekt / Sourcenverzeichnis keine weitere solche Methode.
2. Es gibt keine doppelten (globalen) Variablen.
3. die Reihenfolge der Parameter sind korrekt
4. dcus sind gelöscht, d.h. neu kompiliert, keine doppelten Units im Bereich der Suche
5. die VAR und CONST in der Methodendeklaration entfernt
6. Position der Parameter verändert

An den letzten beiden Punkten sieht man, dass mir an der Stelle eine Idee fehlt, wie ich da weiter kommen kann. Hat jemand eine Idee was ich machen kann? Kann leider kein Demosource zur Verfügung stellen, das geht nur in dem Projekt so (Delphi 7) und lässt sich aber auf anderen EntwicklerPCs nachvollziehen.

Grüße

Geändert von Lemmy ( 4. Sep 2012 um 20:47 Uhr)
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Parameterübergabe an Prozedur

  Alt 4. Sep 2012, 20:32
Moin Lemmy,

ich habe, offen gestanden, nie darauf geachtet, ob sich die Adressen von Variablen ändern, aber:
Stimmen denn die Inhalte noch?
Wenn nicht, wäre der Inhalt der Prozedur interessant.

Was ich nicht verstehe ist folgender Satz:

...sind die Parameter nach dem Daten SChrott...
Was heisst nach dem Daten?
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.380 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Parameterübergabe an Prozedur

  Alt 4. Sep 2012, 20:46
Hi,

nein, die Inhalte stimmen auch nicht mehr, deshalb habe ich auch erst nach den SPeicheradressen geschaut.

Das Datum ist noch korrekt, der INhalt von ID2 ist eine bel. Integerzahl, der Inhalt von ID3 ist der ehem. Inhalt von ID2 (weil wie gesagt der Zeiger auf den Bereich von ID2 zeigt).

Korrektur:

Zitat:
WEnn ich mit F7 einen Schritt weiter gehe, sind die Parameter nach dem Daten SChrott und die Speicheradressen sind anders (also innerhalb der Prozedur).
sollte

Zitat:
WEnn ich mit F7 einen Schritt weiter gehe, sind die Parameter nach dem Datum SChrott und die Speicheradressen sind anders (also innerhalb der Prozedur).
heißen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#4

AW: Parameterübergabe an Prozedur

  Alt 4. Sep 2012, 21:12
Zitat:
 Var Vektor: Array of Integer
Offene Array-Parameter sind so eh nicht möglich, bzw. das ist nicht grade optimal und wenn da Fehler auftreten, dann wundert es mich nicht.

Aber warum sind die Parameter einer Prüffunktion VAR-Parameter?
Ich denke die prüft nud den Inhalt ... von Ändern wird da nichts gesagt.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 4. Sep 2012 um 21:15 Uhr)
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.380 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Parameterübergabe an Prozedur

  Alt 4. Sep 2012, 21:27
Hi,

die Geschichte mit den Var-Parametern hängt daran, dass bei der Prüfung diese ggf. doch geändert werden können. Hängt an der Stelle mit der Fachlogik zusammen und ist nicht so schnell erklärt. Dass hier die Benennung und im Grunde der gesamte Ablauf nicht optimal ist, ist mir klar, aber ich bin leider nicht in der Position das komplett zu überarbeiten.
[edit: Nachtrag]zudem wie oben geschrieben: wenn ich die Vars und Consts aus der Deklaration entferne ändert sich nix am Problem...[/edit]


Aber sag doch noch ein paar Worte zu dem Array:

Warum ist das Array so nicht möglich (Zuweisungsproblematik ist mir bekannt)? Was für Fehler könnten da auftreten die zu so einem Verhalten führen? Zudem, das Array kommt doch erst nach den problematischen Daten?

Um das auszuschließen könnte ich aber sicherlich das Array mal kurz deaktivieren und schauen ob das Problem dann immer noch auftritt...

GRüße

[edit]

so gemacht, Array raus geworfen, ändert nix an der Verschiebung der Speicheradressen..

Geändert von Lemmy ( 4. Sep 2012 um 21:39 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#6

AW: Parameterübergabe an Prozedur

  Alt 4. Sep 2012, 21:44
Hmm, ich hab derartige Probleme eigentlich auch noch nie bemerkt.

Eventuell bist ja doch auf einen Compiler-Bug gestoßen.


Wir können hier aber auch nicht viel helfen, da das Problem hier nicht auftritt.


Tja, was passiert, wenn du allen Code innerhalb der Prüfprozedur auskommentierst?

Ansonsten kannste nur
- debuggen und rausfinden wann/wo es sich verändert
- aus dem Projekt alles entfernen, bis möglichst nur noch der Fehler übrig bleibt und uns den dann zeigen
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.380 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: Parameterübergabe an Prozedur

  Alt 4. Sep 2012, 22:20
Hi,

Du bist ab sofort und offiziell mein Held!

das Deaktivieren der Sourcen hat mich auf die Zielgerade gebracht. Neben div. Inlineprozeduren hat der Entwickler auch ein tolles Label definiert gehabt. Wenn ich das deaktiviere, dann passt das. Habe die entsprechenden Sourcne in eine weitere Inlinemethode gepackt und funktioniert immer noch...

Und da behaupten immer noch welche "goto" sein nicht böse.....

Grüße und dir vielen Dank für die SChützenhilfe....
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#8

AW: Parameterübergabe an Prozedur

  Alt 5. Sep 2012, 15:53
procedure DatenPruefen(const ID: Integer; VAR Bezeichnung: String; VAR Datum:TDateTime; VAR ID2: Integer; VAR ID3: Integer; Var Vektor: Array of Integer);
Sooo viele VAR-Parameter?
Wäre es vielleicht nicht sinnvoll die Parameter zu einem Record zusammenzufassen?
Andreas
  Mit Zitat antworten Zitat
Antwort Antwort


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 07:09 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