AGB  ·  Datenschutz  ·  Impressum  







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

Zugriffsfehler bei eigner Funktion

Ein Thema von plautzer · begonnen am 6. Jan 2005 · letzter Beitrag vom 6. Jan 2005
Antwort Antwort
plautzer

Registriert seit: 23. Aug 2003
172 Beiträge
 
#1

Zugriffsfehler bei eigner Funktion

  Alt 6. Jan 2005, 17:44
Hi,

ich speichere geänderte reihen aus stringgrid in einem label und diese später wieder benutzten zu können. Da ich keine doppelten reihen zu lassen will, habe ich mir eine funktion gebastelt:

Delphi-Quellcode:
var
a:array of integer;
zahl:integer;
Delphi-Quellcode:
function TForm1.posproof(label_zahl,reihe:integer):boolean;
var zahl:integer;
begin
if label_zahl > 1 then
  begin
    zahl:=1;
    while zahl < label_zahl do
      begin
      if reihe= a[zahl] then
      begin
      result:=true;
      exit;
      end
      else zahl:=zahl+1;
   end;
   result:=false;
end
else result:=false;
end;
und hier die prozedur um die reihen zu speichern:

Delphi-Quellcode:
procedure TForm1.stringgrid1SetEditText(Sender: TObject; ACol,
  ARow: Integer; const Value: Strin

g);
begin
if posproof(strtoint(label1.Caption),stringgrid1.Row) = false then
begin
setlength(a,2);
zahl:=strtoint(label1.Caption);
a[zahl]:=stringgrid1.Row;
label1.Caption:=inttostr(zahl+1);
end;
end;
Nun zu meinen problemen:

1) Die zweite zahl, die immer gespeichert wird, ist immer eine utopische (996855217). kA warum? habt ihr einen rat?
2) Es kommt immer ein Error: "zugriffverletzung...."

Stimmt irgentwas mit einem code nicht?

Plautzer
  Mit Zitat antworten Zitat
Keldorn

Registriert seit: 6. Mär 2003
Ort: Meißen
876 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2

Re: Zugriffsfehler bei eigner Funktion

  Alt 6. Jan 2005, 17:52
du hast hier
Delphi-Quellcode:
function TForm1.posproof(label_zahl,reihe:integer):boolean;
var zahl:integer;
zahl nochmal deklariert, der compiler wird dir auch sagen, das der auf zahl zugewiesene Wert niemals benutzt wird. damit verwendest du hier nicht die global angelegte Variable zahl und da du sonst nirgends der globalen Variable Zahl etwas zuweist, hat sie halt irgendeinen Wert.

Mfg Frank

Lükes Grundlage der Programmierung:
Es wird nicht funktionieren
(Murphy)
  Mit Zitat antworten Zitat
plautzer

Registriert seit: 23. Aug 2003
172 Beiträge
 
#3

Re: Zugriffsfehler bei eigner Funktion

  Alt 6. Jan 2005, 18:20
joa stimmt, aber leider hat das nichts problem geändert.

Plautzer
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#4

Re: Zugriffsfehler bei eigner Funktion

  Alt 6. Jan 2005, 18:29
Zitat von plautzer:
joa stimmt, aber leider hat das nichts problem geändert.

Plautzer
Es sieht aber immer noch so aus, dass Dein Problem genau aus dem
besteht was Keldorn oben geschrieben hat. Da Du Deinen Source ja scheionbar geändert hast,
könntest Du ihn ja hier mal zeigen. Macht die Sache einfacher.

P.S. Das kommt davon wenn man globale Variablen verwendet.
I come from outer space to save the human race
  Mit Zitat antworten Zitat
plautzer

Registriert seit: 23. Aug 2003
172 Beiträge
 
#5

Re: Zugriffsfehler bei eigner Funktion

  Alt 6. Jan 2005, 18:55
Hi,

an der globalen deklaraition hats auch net gelegen.

Mein code:
Delphi-Quellcode:
function TForm1.posproof(label_zahl,reihe:integer):boolean;
begin
if label_zahl > 1 then
  begin
    zahl:=1;
    while zahl < label_zahl do
      begin
      if reihe= a[zahl] then
      begin
      result:=true;
      exit;
      end
      else zahl:=zahl+1;
   end;
   result:=false;
end
else result:=false;
end;
Genau gesagt sind es zwei fehlermeldung: einmal "accessviolation" und zum anderen "Setpointer ungültig".

Plautzer
  Mit Zitat antworten Zitat
Keldorn

Registriert seit: 6. Mär 2003
Ort: Meißen
876 Beiträge
 
Delphi 10.1 Berlin Professional
 
#6

Re: Zugriffsfehler bei eigner Funktion

  Alt 6. Jan 2005, 19:02
ehrlich gesagt seh ich bei dir überhaupt nicht mehr durch. Bei posproof rechnest du mit zahl, zum schluß sthet noch zahl:=zahl+1 warum? wird nie gebraucht, unabhängig davon, ob du zahl lokal oder global deklarierst.
bei SetEditText rechnset du auch wieder mit der zahl

welche zahl hat denn label1.caption? und wenn du bei posproof schoin mit dem array a arbeitest, wo wird das schonmal angelegt? geh mal deinen code einzeln durch und setz dir haltepunkte und kontollier die werte.

Lükes Grundlage der Programmierung:
Es wird nicht funktionieren
(Murphy)
  Mit Zitat antworten Zitat
plautzer

Registriert seit: 23. Aug 2003
172 Beiträge
 
#7

Re: Zugriffsfehler bei eigner Funktion

  Alt 6. Jan 2005, 20:14
Gut, ich versuche mal meine Gehirngänge darzulegen:

label1 hat den start 1.

also wenn die funktion das erst mal durchlaufen wird, dann sie gleich auf false gesetz:

Delphi-Quellcode:
[b]if label_zahl > 1 then
  begin[/b]
    zahl:=1;
    while zahl < label_zahl do
      begin
      if reihe= a[zahl] then //es wird geprüft ob die reihe schonmal gespeichert wurde
      begin
      result:=true; //Bed. erfüllt, + verlassen der schleife
      exit;
      end
      else zahl:=zahl+1; // Bed. nicht erfüllt: zahl wird erhöht um die folgenden arrays zu prüfen
   end;
   result:=false; //falls keine zahlen übereinstimmen-> bed. stimmen nicht überein
[b]end
else result:=false;[/b]
end;
und somit zuerst einmal das array deklariert und den Wert von dem Label übergeben:

Delphi-Quellcode:
if posproof(strtoint(label1.Caption),stringgrid1.Row) = false then
begin
setlength(a,2);
zahl:=strtoint(label1.Caption); //zahl wird jedes mal definiert
a[zahl]:=stringgrid1.Row;
label1.Caption:=inttostr(zahl+1); //zahl wird erhöht
end;
der Wert der variable 'zahl' wird immer kurz vorm ausführen eines prozesses definiert, so sollte es also keine Konflikte geben.


Plautzer
  Mit Zitat antworten Zitat
Keldorn

Registriert seit: 6. Mär 2003
Ort: Meißen
876 Beiträge
 
Delphi 10.1 Berlin Professional
 
#8

Re: Zugriffsfehler bei eigner Funktion

  Alt 6. Jan 2005, 20:30
jetzt dämmerts langsam.

Delphi-Quellcode:
if posproof(strtoint(label1.Caption),stringgrid1.Row) = false then
begin
setlength(a,2); //2)
zahl:=strtoint(label1.Caption); //zahl wird jedes mal definiert
a[zahl]:=stringgrid1.Row; //3)
label1.Caption:=inttostr(zahl+1); //zahl wird erhöht , 1)
end;
1) du erhöhst aber nur die zahl
2) dein array hat aber immer die Länge 2
3) wenn die zahl=2 ist, schepperts hier, weil du aufs 3. element zugreifst, das existiert aber gar nicht.

setlength(a,stringgrid.rowcount), mach dein array so groß wie dein grid.

Lükes Grundlage der Programmierung:
Es wird nicht funktionieren
(Murphy)
  Mit Zitat antworten Zitat
plautzer

Registriert seit: 23. Aug 2003
172 Beiträge
 
#9

Re: Zugriffsfehler bei eigner Funktion

  Alt 6. Jan 2005, 20:56
achso, das hatte ich wohl falsch verstanden!

Vielen Dank, jetzt funktioniert es endlich.

Plautzer
  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 23:02 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