| Autor |
Beitrag |
CK_CK
      
Beiträge: 140
Win 2000, Win XP Prof
Delphi 2006 Enterprise
|
Verfasst: Fr 12.08.05 18:33
Hallo Delphi-Forumianer! *ggg*
Ich sitze hier schon seit Stunden an folgendem Problem:
Ich habe einen neuen typ generiert: Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| type TBeispiel = record Visible: Boolean; pos_x,pos_y: Integer; Tag: Byte; end; |
Das habe ich in ein dynamisches Array gepackt: Delphi-Quelltext 1: 2:
| var Beispiel: Array of TBeispiel; |
Wenn ich jetzt im Programm die Länge dieses Arrays anpassen will ( SetLength(Beispiel,10);), bekomme ich immer einen Ausnahmefehler...
Weiß jemand, was ich machen soll?
Ich bin schon so verzweifelt, dass ich am überlegen bin, ob ich Delphi-Quelltext 1: 2:
| var Beispiel: Array[1..99999] of TBeispiel; | machen soll...
Danke für eure Hilfe,
CK_CK
Moderiert von AXMD: Code- durch Delphi-Tags ersetzt.
|
|
Tilman
      
Beiträge: 1405
Erhaltene Danke: 51
Win 7, Android
Turbo Delphi, Eclipse
|
Verfasst: Fr 12.08.05 18:49
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| type TBeispiel = record Visible: Boolean; pos_x,pos_y: Integer; Tag: Byte; end;
var beispiel: array of TBeispiel; procedure TForm1.Button1Click(Sender: TObject); begin SetLength(Beispiel,100); Beispiel[90].Visible := true; end; |
Dieser Code produziert bei mir keinen Fehler. Poste mal deinen genauen code.
|
|
CK_CK 
      
Beiträge: 140
Win 2000, Win XP Prof
Delphi 2006 Enterprise
|
Verfasst: Fr 12.08.05 18:55
Also, ich hab' gerade genau deinen Code bei mir eingegeben und kompiliert...
(Das einzige was in meinem Code anders war ist: TBeispiel heißt TLinie...)
Nach einem klick auf den Button: Zugriffsverletzung...
CK_CK
|
|
Tilman
      
Beiträge: 1405
Erhaltene Danke: 51
Win 7, Android
Turbo Delphi, Eclipse
|
Verfasst: Fr 12.08.05 19:06
Tja, bei mir funzt es - bei dir nicht. ich kann mich nur nochmal wiederholen: Poste mal deine komplette Unit die den Fehler produziert, sonst kann dir hier wohl keiner Helfen.
|
|
CK_CK 
      
Beiträge: 140
Win 2000, Win XP Prof
Delphi 2006 Enterprise
|
Verfasst: Fr 12.08.05 19:19
In Ordnung...
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| type TLinie = record Visible: Boolean; pos_x: Integer; pos_y: Integer; Tag: Byte; end;
var Tool: Byte; Skin: TPicture; Design: Array[1..24] of Array[1..18] of byte; Status: Boolean; Linien: Array of TLinie; |
...
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| procedure TForm1.BitBtn1Click(Sender: TObject); var i,j: Integer; tmpstr: String; begin ListBox1.Clear; for j := 1 to 18 do begin tmpstr := ''; for i := 1 to 24 do begin tmpstr := tmpstr + IntToStr(Design[i,j]) + ','; end; ListBox1.Items.Add(tmpstr); end; ThreadedTimer1.Enabled := True; SetLength(Linien,100); Linien[90].Visible := true; end; |
Aber das bringt glaub' ich auch nichts... Ist ja das gleiche wie oben...
Vielleicht liegt's ja an Delphi 5...
EDIT: Bei Delphi 7 klappt's auch nicht... Wie hast du's nur gemacht??? Hast du auch schon auf den Button geklickt... Der Laufzeitfehler kommt erst dann...
CK_CK
Zuletzt bearbeitet von CK_CK am Fr 12.08.05 19:31, insgesamt 3-mal bearbeitet
|
|
Tilman
      
Beiträge: 1405
Erhaltene Danke: 51
Win 7, Android
Turbo Delphi, Eclipse
|
Verfasst: Fr 12.08.05 19:28
Jetzt hast du aber genau die deklaration von "Linien" vorenthalten
|
|
CK_CK 
      
Beiträge: 140
Win 2000, Win XP Prof
Delphi 2006 Enterprise
|
Verfasst: Fr 12.08.05 19:32
Da ist sie doch:
| Zitat: | Quelltext 1: 2: 3: 4: 5: 6:
| var Tool: Byte; Skin: TPicture; Design: Array[1..24] of Array[1..18] of byte; Status: Boolean; Linien: Array of TLinie; | |
Oder ist irgendetwas in meiner uses-Klausel, was Dynamische Arrays nicht mag?
Quelltext 1: 2: 3:
| uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Menus, ComCtrls, ToolWin, ImgList, StdCtrls, ExtCtrls, Buttons; |
CK_CK
|
|
Tilman
      
Beiträge: 1405
Erhaltene Danke: 51
Win 7, Android
Turbo Delphi, Eclipse
|
Verfasst: Fr 12.08.05 19:40
CK_CK hat folgendes geschrieben: | Da ist sie doch:
| Zitat: | Quelltext 1: 2: 3: 4: 5: 6:
| var Tool: Byte; Skin: TPicture; Design: Array[1..24] of Array[1..18] of byte; Status: Boolean; Linien: Array of TLinie; | |
|
verarsch mich nicht freundchen, eben stand da noch Lasers: Array
CK_CK hat folgendes geschrieben: | Oder ist irgendetwas in meiner uses-Klausel, was Dynamische Arrays nicht mag?
Quelltext 1: 2: 3:
| uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Menus, ComCtrls, ToolWin, ImgList, StdCtrls, ExtCtrls, Buttons; |
CK_CK |
Bei mir funzt das! Kein Fehler, davür wird die Listbox voller Nullen geschrieben.
Bist du dir eigentlich 100%ig sicher das der fehler an dieser Stelle
SetLength(Linien,100);
Linien[90].Visible := true;
auftritt?
Zuletzt bearbeitet von Tilman am Fr 12.08.05 19:43, insgesamt 1-mal bearbeitet
|
|
CK_CK 
      
Beiträge: 140
Win 2000, Win XP Prof
Delphi 2006 Enterprise
|
Verfasst: Fr 12.08.05 19:43
Ich weiß, ich hatte mich verschrieben...
(Im Programm und hab's falsch rüberkopiert, so ist's aber wie in meinem Programm...  )
CK_CK
|
|
Tilman
      
Beiträge: 1405
Erhaltene Danke: 51
Win 7, Android
Turbo Delphi, Eclipse
|
Verfasst: Fr 12.08.05 19:46
Also bei mir (D7,WinXP) arbeitet dieser Code (abgesehen von Warnungen: Tool,Skin,Status deklariert aber nicht verwendet):
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons;
type TForm1 = class(TForm) BitBtn1: TBitBtn; ListBox1: TListBox; procedure BitBtn1Click(Sender: TObject); private public end;
var Form1: TForm1;
implementation
{$R *.dfm} type TLinie = record Visible: Boolean; pos_x: Integer; pos_y: Integer; Tag: Byte; end;
var Tool: Byte; Skin: TPicture; Design: Array[1..24] of Array[1..18] of byte; Status: Boolean; Linien: Array of TLinie; procedure TForm1.BitBtn1Click(Sender: TObject); var i,j: Integer; tmpstr: String; begin ListBox1.Clear; for j := 1 to 18 do begin tmpstr := ''; for i := 1 to 24 do begin tmpstr := tmpstr + IntToStr(Design[i,j]) + ','; end; ListBox1.Items.Add(tmpstr); end; SetLength(Linien,100); Linien[90].Visible := true; end;
end. |
|
|
LigH
      
Beiträge: 239
Win98SE, Win2000SP4
D7
|
Verfasst: Fr 12.08.05 19:48
Denkt mal darüber nach, ob bestimmte Compiler-Optionen das eventuell verhindern könnten.
|
|
CK_CK 
      
Beiträge: 140
Win 2000, Win XP Prof
Delphi 2006 Enterprise
|
Verfasst: Fr 12.08.05 19:55
Ich merk' gerade, dass bei mir gar keine dynamischen Arrays funktionieren...
Aber nur in diesem Programm...
Wenn ich ein neues Projekt starte funktioniert alles einwandfrei...
(Dein Code, meiner und sonstige dynamische spielereien...)
*langsam durchdreh*
Wie kann so etwas nur sein???
Ich werd' einfach das Projekt löschen und es von vorne anfangen...
...Auch wenn's weh tut...
Aber TROTZDEM VIELEN DANK FÜR DEINE HILFE!!!
CK_CK
|
|
LigH
      
Beiträge: 239
Win98SE, Win2000SP4
D7
|
Verfasst: Fr 12.08.05 19:56
HAAALOOO - Erde an CK_CK!
Bitte die Compiler-Optionen überprüfen!
|
|
CK_CK 
      
Beiträge: 140
Win 2000, Win XP Prof
Delphi 2006 Enterprise
|
Verfasst: Fr 12.08.05 19:57
Was soll da denn falsch sein?
CK_CK
|
|
Tilman
      
Beiträge: 1405
Erhaltene Danke: 51
Win 7, Android
Turbo Delphi, Eclipse
|
Verfasst: Fr 12.08.05 19:58
Nur noch als letzten Hinweis: Mann kann statt dynamischer Arrays auch Listen verwenden. Z.B. eine Zeigerkonstruktion. Eventuell musst du dein Programm also nicht wegwerfen. (Find ich eh sehr merkwürdig, hatte neulich aber mal ein ähnliches Problem, bestimmte Dinge liefen in genau einem Project nicht mehr)
|
|
Keldorn
      
Beiträge: 2266
Erhaltene Danke: 4
Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
|
Verfasst: Fr 12.08.05 20:03
_________________ Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
|
|
LigH
      
Beiträge: 239
Win98SE, Win2000SP4
D7
|
Verfasst: Fr 12.08.05 20:04
CK_CK hat folgendes geschrieben: | | Was soll da denn falsch sein? |
Solange du uns nicht schreibst, wie du sie eingestellt hast, können wir dir auch nicht sagen, ob sie eventuell falsch eingestellt sind, und eine der Optionen vielleicht die Array-Erweiterung verhindert.
|
|
CK_CK 
      
Beiträge: 140
Win 2000, Win XP Prof
Delphi 2006 Enterprise
|
Verfasst: Fr 12.08.05 20:12
@Keldorn:
Der Timer macht (noch) gar nichts (keine Ereignisse),
ich hab ihn auch zum Test schon gelöscht, es funktioniert trotzdem nicht...
@LigH:
(Das ist doch, was du meinst, oder?
CK_CK
|
|
Keldorn
      
Beiträge: 2266
Erhaltene Danke: 4
Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
|
Verfasst: Fr 12.08.05 20:16
dann zeige mal deinen kompletten code, bzw häng dein Projekt als Anhang dran
_________________ Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
|
|
LigH
      
Beiträge: 239
Win98SE, Win2000SP4
D7
|
Verfasst: Fr 12.08.05 20:20
Genau.
"Erweiterte Syntax", "Offene Parameter", "Huge-Strings" sind an, gut.
"Strenge Prüfung von VAR-Strings" muss meist nicht sein - dürfte hier aber keine Auswirkung haben.
Noch sehe ich hier keine Ursache; da wird als nächstes wohl Quelltext-Debugging angesagt sein, um genau die Zeile zu finden, wo es passiert ist, sowie die Belegung der Variablen, als es passierte...
|
|