![]() |
Fehler wenn exe größer ist als 1mb
Hi
ich habe das Problem, dass mein Programm seit gestern leider die Größe von 1MB überschritten hat und es seitdem jedesmal wenn ich ein Nebenform aufrufe (Form2.show;) eine Fehlermeldung (Zugriffsverletzung bei Adresse 0045A6B8 in Modul 'project1.exe'. Lesen von Adresse 00000070.) erzeugt. Ich hab schon in der DP und in Google gesucht aber nichts zu diesem Problem gefunden. :( |
Re: Fehler wenn exe größer ist als 1mb
sind die nebenformulare initialisiert ? du solltest eh nicht mit globalen variablen arbeiten sondern eher "Tform2.create" benutzen :-)
gruß |
Re: Fehler wenn exe größer ist als 1mb
Wir wäre eine deratige Begrenzung unbekannt. Die bekannte liegt bei 2 GB
|
Re: Fehler wenn exe größer ist als 1mb
ich werde mal form2.create versuchen.
danke für die schnellen antworten. |
Re: Fehler wenn exe größer ist als 1mb
Hallo,
genauer lesen ! TForm2.Create nicht Form2.Create; Ausserdem würde ich mal aussagekräftige Namen verwenden. Heiko |
Re: Fehler wenn exe größer ist als 1mb
oder nochmal detaillierter: anstatt form2.show solltest du vielleicht (auch wenns teilweise verpöhnt ist) es so tun:
Delphi-Quellcode:
oder ähnlich.. jenachdem wie du es brauchst.
with TForm2.Create do
begin try showmodal; finally free; end; end; |
Re: Fehler wenn exe größer ist als 1mb
Die Adressen der Zugriffsverletzung sagen ziemlich eindeutig aus das da ein Zugriff auf eine Objectinstanz stattfindet welche nil ist, also nicht initialisiert. Das der Fehler erst jetzt in Erscheinung tritt kann mit der Größe zu tun haben und zwar weil sich mit Umfang des Programmes ja auch bestimmte Bereiche verschieben.
Wenn der Speichermanager zum Beispiel immer 200Kb Blöcke vom System anfordert kann es sein das du einfach bisher daneben gegriffen hast aber es noch auf den vom Speichermanager reservierten Bereich zugegriffen hat. Durch Verschieben von Adressen etc. beim hinzufügen neuer Dinge hat das Glück jetzt wohl jemanden verlassen :-) |
Re: Fehler wenn exe größer ist als 1mb
aber warum tritt das problem erst auf wenn die Anwendung größer ist als 1MB?
|
Re: Fehler wenn exe größer ist als 1mb
aso jetzt hab ichs verstanden.
|
Re: Fehler wenn exe größer ist als 1mb
Moin!
Wir erstellen mit D4 wie auch bis D2007 Delphi EXE'n mit einer Grösse von 180 MB ohne Probleme. Eine 1 MB Grenze gibt es somit definitiv nicht. MfG Muetze1 |
Re: Fehler wenn exe größer ist als 1mb
180MB? :shock:
Was stopft ihr da alles rein? |
Re: Fehler wenn exe größer ist als 1mb
Moin!
Bis zu 400 vollgestopfte Formulare mit entsprechend vielen Komponenten, grafischen Elementen etc? Es ist ein kommerzielles Projekt und das auslagern und extern laden von manchen Resourcen bringt im Endeffekt mehr Aufwand und weniger Ersparnis. Auch wird es dann schwieriger bestimmte Arbeiten auszulagern an andere (nicht eingearbeitete) Kräfte. MfG Muetze1 |
Re: Fehler wenn exe größer ist als 1mb
muetze: autsch! :-)
und ich dachte ne 25MB exe wär schon oversized ^^ |
Re: Fehler wenn exe größer ist als 1mb
es geht immernoch nicht.
ich hab jetzt with TForm2.Create(self) do begin try showmodal; finally free; end; probiert aber es geht nicht. es kommt die fehlermeldung undefinierter bezeichner tform2. bei den globalen variablen hab ich Form2:tform stehen. ka ob das so stimmt. ich hab auch schon Form2:tform2 probiert.aber da kommt die gleiche fehlermeldung nur schon am anfang. |
Re: Fehler wenn exe größer ist als 1mb
jetzt hab ich die variablen weg gemacht und es statet aber es kommen die selben fehlermeldungen wie am Anfang. (zugriffsverletzung...)
|
Re: Fehler wenn exe größer ist als 1mb
Zitat:
Mal anders gefragt: Wenn ich Deine 180 MB-Echse auf einen nagelneuen XP/Vista-Rechner starte: Was macht Deine Echse dann aus den 180 MB? Was legt sie ("aus sich selbst heraus") auf dem nagelneuen PC an? Oder sind von den 180 MB 160 MB nur akustische/visuelle Hilfe? Wollt' ja nur interessenhalber mal nachgefragt haben :oops: |
Re: Fehler wenn exe größer ist als 1mb
Delphi-Quellcode:
villeicht hilft euch das weiter.
//...
uses Unit2, unit3, Unit4, unit5, Unit6, Unit7, Unit9; //... procedure TForm1.Button7Click(Sender: TObject); begin with TForm2.Create(self) do begin try showmodal; finally free; end; end; end; //... end. |
Re: Fehler wenn exe größer ist als 1mb
aaaaaaaaaaaaaaaaaaahhhhhhhhhhhhhhhhh ich hab das problem gefunden. Danke für die hilfe.
|
Re: Fehler wenn exe größer ist als 1mb
Zitat:
|
Re: Fehler wenn exe größer ist als 1mb
ich hab jetzt leider noch ein problem. form2.edit1.text:=form1.edit1.text geht jetzt nicht(zugriffsverletzung...). und wenn ich in form2 form1.create... mache startet form1 2 mal.
|
Re: Fehler wenn exe größer ist als 1mb
Du musst u.U. die Unit der Form1 der Unit von Form2 bekannt machen.
Aber dir scheinen hier etwas die theoretischen Grundlagen zu fehlen |
Re: Fehler wenn exe größer ist als 1mb
ich hab mir das selber beigebracht :(
ein beispiel quelltext wäre gut :roll: |
Re: Fehler wenn exe größer ist als 1mb
|
Re: Fehler wenn exe größer ist als 1mb
in form2 steht ja auch schon
uses Unit1; der fehler kommt trotzdem. |
Re: Fehler wenn exe größer ist als 1mb
Moin Marius,
Du benutzt aber Form2 in Unit1... ;-) |
Re: Fehler wenn exe größer ist als 1mb
Hast du in Unit2 auch eine Variable mit der Bezeichnung Form1?
|
Re: Fehler wenn exe größer ist als 1mb
die varable hab ich nicht deklariert weil es vor dem 1MB Problem ohne variable ging und wenn ich Form1:Tform1 hinschreibe kommt undefinierter bezeichner Tform1.
Ich Form2 in Unit1 nicht ich zeige es nur irgendwan an. aber form1.edit1.text:=form2.edit1.text geht auch nicht. |
Re: Fehler wenn exe größer ist als 1mb
Zeig mal etwas Quellcode. Sonst sind alles nur Spekulationen
|
Re: Fehler wenn exe größer ist als 1mb
Delphi-Quellcode:
unit Unit1;
//... var Form1: TForm1; //... uses Unit2, unit3, Unit4, unit5, Unit6, Unit7, Unit9; //... procedure TForm1.Button98Click(Sender: TObject); begin with TForm2.Create(self) do begin try showmodal; finally free; end; end; end; //...
Delphi-Quellcode:
unit Unit2;
//... var Form2: TForm2; implementation uses Unit1; //... procedure TForm2.FormShow(Sender: TObject); begin edit1.Text:=form1.edit12.Text; //das geht nicht end; |
Re: Fehler wenn exe größer ist als 1mb
Wie werden die Formulare erzeugt?
|
Re: Fehler wenn exe größer ist als 1mb
was meinst du damit? ich kompillier es halt ganz normal und die anderen formulare hab ich mit "neues formular" hinzugefügt. Tut mir leid wenn die antwort etwas dumm war. :( :( :(
Villeicht hilft dir das weiter
Delphi-Quellcode:
program Project1; uses Forms, Unit1 in 'Unit1.pas' {Form1}, Unit2 in 'Unit2.pas' {Form2}, Unit3 in 'Unit3.pas' {Form3}, Unit4 in 'Unit4.pas' {Form4}, Unit5 in 'Unit5.pas' {Form5}, Unit6 in 'Unit6.pas' {Form6}, Unit7 in 'Unit7.pas' {Form7}, // Unit8 in 'Unit8.pas' {Form8}, Unit9 in 'Unit9.pas' {Form9}; {$R *.res} begin Application.Initialize; Application.CreateForm(TForm1, Form1); Application.CreateForm(TForm2, Form2); Application.CreateForm(TForm3, Form3); Application.CreateForm(TForm4, Form4); Application.CreateForm(TForm5, Form5); Application.CreateForm(TForm6, Form6); Application.CreateForm(TForm7, Form7); // Application.CreateForm(TForm8, Form8); Application.CreateForm(TForm9, Form9); Application.Run; end. |
Re: Fehler wenn exe größer ist als 1mb
Form2 referenziert aber nicht die dynamisch erzeugte Instanz
|
Re: Fehler wenn exe größer ist als 1mb
du kannst Dir das Form2.Create schenken, da die Formulare schon automatisch erzeugt werden.
...um Form2 anzuzeigen reicht Form2.Show oder Form2.ShowModal Die Zugriffsverletzungen kam beim Erzeugen eines Formulars mit gleichem Namen. |
Re: Fehler wenn exe größer ist als 1mb
Hallo marius0702
Delphi-Quellcode:
Das ist richtig, das geht so nicht.
procedure TForm2.FormShow(Sender: TObject);
begin edit1.Text:=form1.edit12.Text; //das geht nicht end; Du solltest Dir in TForm1 eine Funktion schreiben die den Inhalt von form1.edit12.Text zurückgibt und im Public - Bereich steht, vieleicht dabei testen ob der Inhalt gültig ist. Dann solltest Du auch schreiben wann es nicht geht. Beim Kompilieren? Bei der Ausführung? |
Re: Fehler wenn exe größer ist als 1mb
Zitat:
Ist das Problem mit der Zugriffsverletzung jetzt eigentlich gelöst? |
Re: Fehler wenn exe größer ist als 1mb
Delphi-Quellcode:
Verstößt gegen die Regeln der OOP.
edit1.Text:=form1.edit12.Text;
Stellen alle Copiler sicher das form1.edit12.Text initialisiert ist? form1.edit12.Text ist ein Speicherplatz, wer initialisiert ihn? @alzaimar Du kannst jetzt Dein Senf dazugeben. |
Re: Fehler wenn exe größer ist als 1mb
Zitat:
Um es kurz zu machen: Delphi bzw. die Komponente TEdit initialisiert die Eigenschaft 'Text' automatisch. Nachtreiter, ich möchte Dich bitten, deine Bemerkungen und Ausführungen auf das Thema zu beschränken. Wenn Du mir etwas zu sagen hast, dann schick mir eine PN. So machen das Erwachsene. |
Re: Fehler wenn exe größer ist als 1mb
Hallo,
Stellen alle Copiler sicher das form1.edit12.Text initialisiert ist? ja form1.edit12.Text Speicherplatz ? hm, falsch, ist ein property Das einzige, was ich wirklich gelten lasse ;) Stellen alle Copiler sicher das form1 initialisiert ist Form1 wird vom Form-Designer erzeugt als global Variable zum einfacheren Zugriff. Das erste, was ich immer bei neuen Forms machen, ist ebend diese Variable zu löschen. Heiko |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:53 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz