AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Zugriffverletzung beim Procedure Aufruf
Thema durchsuchen
Ansicht
Themen-Optionen

Zugriffverletzung beim Procedure Aufruf

Ein Thema von fgb · begonnen am 5. Jan 2007 · letzter Beitrag vom 5. Jan 2007
Antwort Antwort
Seite 1 von 2  1 2      
fgb

Registriert seit: 4. Okt 2004
35 Beiträge
 
#1

Zugriffverletzung beim Procedure Aufruf

  Alt 5. Jan 2007, 12:57
Moin,

Kann mir jemand sagen woher es kommt das Delphi bei den Aufruf zwei meiner Proceduren eine zugriffverletung bekommt, auch wenn ich sie Minimaliesiere und KEINE Parameteruebergabe mache, und nur eine Showmessage ausgebe.

die Proceduren werden uebrigens vom Hauptformular aufgerufen, und liegen selber in einer UNIT.

vielen Dank

FGB
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.351 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Zugriffverletzung beim Procedure Aufruf

  Alt 5. Jan 2007, 13:08
Zitat von fgb:
Moin,

Kann mir jemand sagen woher es kommt das Delphi bei den Aufruf zwei meiner Proceduren eine zugriffverletung bekommt, auch wenn ich sie Minimaliesiere und KEINE Parameteruebergabe mache, und nur eine Showmessage ausgebe.

die Proceduren werden uebrigens vom Hauptformular aufgerufen, und liegen selber in einer UNIT.

vielen Dank

FGB
Ich denke, es liegt an Fehlern in deinem Code.

Cu, Frank
Frank Reim
  Mit Zitat antworten Zitat
Udontknow

Registriert seit: 17. Jun 2002
223 Beiträge
 
#3

Re: Zugriffverletzung beim Procedure Aufruf

  Alt 5. Jan 2007, 13:16
Ja, der Vorredner hat sicherlich recht.

Zeig uns doch mal den Code einer der Prozeduren.

Cu,
Udontknow
  Mit Zitat antworten Zitat
fgb

Registriert seit: 4. Okt 2004
35 Beiträge
 
#4

Re: Zugriffverletzung beim Procedure Aufruf

  Alt 5. Jan 2007, 13:21
Scheint doch an einen Parameter zuliegen und zwar an ein Record das im Hauptformular Global ist und sich sonst auch immer an anderen Procedure Funktionen uebergeben laesst.

Und ich bekomme die Zugriffsverletzung schon beim begin und ich vermute er mag TProjekte nicht.
Delphi-Quellcode:
procedure auswertung_dat_init(Anzahl: TGroesse; Projekte: TProjekte;
var Auswertung: TAuswertungDat);
var
  i: Integer; // Durchlauf Projekt erstemal
  j: Integer; // Durchlauf Projekt zweitesmal
  y: Integer; // Durchlauf Projekt drittesmal

begin
  // Setzte die Anzahl der Projekte
  // in der Auswertung.
  try
    //setLength(Auswertung, Anzahl);
    except on EOutOfMemory do Showmessage('Nicht Genuegend Speicher fuer die Auswertung Vorhanden.');
  end;
 {for i := 0 to Anzahl - 1 do
  begin
    setLength(Auswertung[i], Projekte[i].AnzDateien);
    for j := 0 to Projekte[i].AnzDateien - 1 do
    begin
      setLength(Auswertung[i][j], Anzahl);
        for y := 0 to Anzahl - 1 do
        begin
          setLength(Auswertung[i][j][y], Projekte[y].AnzDateien);
        end;
    end;
  end; }

end;
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Zugriffverletzung beim Procedure Aufruf

  Alt 5. Jan 2007, 13:38
Keine Ahnung, was jetzt TGroesse und TProjekte so ist, aber ich würde mal probieren ein "const" vor die beiden Parameter zu setzen.
  Mit Zitat antworten Zitat
fgb

Registriert seit: 4. Okt 2004
35 Beiträge
 
#6

Re: Zugriffverletzung beim Procedure Aufruf

  Alt 5. Jan 2007, 13:42
Hat geklappt aber wieso?

Delphi-Quellcode:
 TGroesse = 0..100;
 TInfo = Record
            Nr : Word;
            Kopf : String[30];
            Inhalt: String;
  End;

  TUnterprogramme = array[TAnzUnterprogramme] of TInfo;

  TProgramme = Record
            Unterprogramme: TUnterprogramme;
            Anzahl: TAnzUnterprogramme;
  End;

  TDatei = Record
            Name : String[100];
            Inhalt : String;
            Typ : TTyp;
            Nr : Word;
            Programname : String;
            Interfaceteil : String;
            Implementations : String;
            Hauptteil : String;
            Unterprogramme: TProgramme;
  End;

  TDateien = array[TGroesse] of TDatei;


  TInfos = array[TGroesse] of TInfo;

  TProjekt = Record
              Ordner : String[100]; //Entwerder Ordnername oder Dateiname
              AnzDateien: TGroesse;
              Dateien : TDateien;
  End;
  // Projekte Dateien Unterprogramme
  TProjekte = array[TGroesse] of TProjekt;
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: Zugriffverletzung beim Procedure Aufruf

  Alt 5. Jan 2007, 13:55
Hallo,

solange dieser Record nicht als File Of Record gespeichert werden soll,
würde ich erst mal das String[x] durch ein normales String ersetzen,
schon um Speicherplatz zu sparen.

Ausserdem nimmt man TList für solche Sachen,
sonst bist du ja begrenzt auf 100 (TGroesse).
Wo wir dort gerade sind TGroesse -> const C_MaxRecords klingt schöner.

Dieses

AnzDateien: TGroesse; also AnzDateien: 0..100

sieht mir auch sehr merkwürdig aus.


Sicher das ein var vor den beiden letzten Parametern
und komplett nichts bringt?


Ich würde aber trotzdem erst mal alle Records in Klassen umformen,
und dann Listen (TList) verwenden.
Wenn du eine beliebige Menge Einträgen erlauben willst,
musst das das später eh machen.
Oder du nimmst dynamische Arrays, du mag ich aber nicht so.


Heiko
Heiko
  Mit Zitat antworten Zitat
fgb

Registriert seit: 4. Okt 2004
35 Beiträge
 
#8

Re: Zugriffverletzung beim Procedure Aufruf

  Alt 5. Jan 2007, 14:17
Zitat von hoika:
Hallo,

solange dieser Record nicht als File Of Record gespeichert werden soll,
würde ich erst mal das String[x] durch ein normales String ersetzen,
schon um Speicherplatz zu sparen.

Ausserdem nimmt man TList für solche Sachen,
sonst bist du ja begrenzt auf 100 (TGroesse).
Wo wir dort gerade sind TGroesse -> const C_MaxRecords klingt schöner.

Dieses

AnzDateien: TGroesse; also AnzDateien: 0..100

sieht mir auch sehr merkwürdig aus.


Sicher das ein var vor den beiden letzten Parametern
und komplett nichts bringt?


Ich würde aber trotzdem erst mal alle Records in Klassen umformen,
und dann Listen (TList) verwenden.
Wenn du eine beliebige Menge Einträgen erlauben willst,
musst das das später eh machen.
Oder du nimmst dynamische Arrays, du mag ich aber nicht so.


Heiko
Zitat:
TGroesse -> const C_MaxRecords klingt schöner.
Hatte schon eine Konstante fuer die 100 hatte sie nur rausgenommen, um hier den code zuzeigen.
Zitat:
Sicher das ein var vor den beiden letzten Parametern
und komplett nichts bringt?
Funktioniert auch aber ich will die ja sowieso nixht zurueck geben, versteh bloss nicht warum es nicht auch ohne const oder var geht?
Zitat:
Ich würde aber trotzdem erst mal alle Records in Klassen umformen,
und dann Listen (TList) verwenden.
Wenn du eine beliebige Menge Einträgen erlauben willst,
musst das das später eh machen.
Oder du nimmst dynamische Arrays, du mag ich aber nicht so.
Warum sollte ich keine Records verwenden und die in Listen oder Dynamische Arrays tun?

vielen vielen Dank
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: Zugriffverletzung beim Procedure Aufruf

  Alt 5. Jan 2007, 14:29
Hallo,

ohne var oder const wird bei records die ganze Struktur auf
den Stack abgelegt (kopiert), call by value, wie es so schön heisst.
Das ist erstens zeitaufwändig und zweitens hier sinnlos.

Mit var oder const wird nur ein Zeiger auf dem Stack angelegt.

Mit TList wird immer nur der Speicher belegt,
der aktuell benötigt wird,
also bei 2 Projekten nur der Speicher für 2 Porjekte.
Ausserdem kann die Anzahl der Projekte oder Dateien
beliebig gross werden (naja 2 Mrd. ...)


Heiko
Heiko
  Mit Zitat antworten Zitat
fgb

Registriert seit: 4. Okt 2004
35 Beiträge
 
#10

Re: Zugriffverletzung beim Procedure Aufruf

  Alt 5. Jan 2007, 14:37
Zitat von hoika:
Mit TList wird immer nur der Speicher belegt,
der aktuell benötigt wird,
also bei 2 Projekten nur der Speicher für 2 Porjekte.
Ausserdem kann die Anzahl der Projekte oder Dateien
beliebig gross werden (naja 2 Mrd. ...)


Heiko
Ich fragte mich bloss warum ich Klassen in Listen bzw. Dyna. Arrays tun soll und nicht Records?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 05:49 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