Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Caran

Anmeldungsdatum: 11.03.2007 Beiträge: 290 Wohnort: Lörrach
|
Verfasst am: 05.01.2008, 11:51 Titel: Begrenzte Anzahl an Variablen? |
|
|
Hi,
mir ist vor kurzem etwas aufgefallen: nachdem ich mir einen UDT gecodet habe etwa so;
Code: |
Type test
v1(0 to 10000) as single
v2(0 to 10000) as single
end type
|
stürzt mein Programm immer ab. Also man sieht die Console und dann verschwindet diese wieder. Auch im Taskmanager findet sich das Programm nicht mehr.
Nun funktioniert es seltsamer Weise in einem anderen Programm, indem ich weniger Variablen deklariert habe. Am Code liegts warscheinlich nicht, bis vielleicht auf die vielen Variablen die ich im ersten geDIMt habe.
Also die konkrete Frage ist ob die Anzahl der Variablen begrenzt ist - was natürlich ziemlich seltsam wäre?
MfG Caran _________________ Eine Erkenntnis von heute kann die Tochter eines Irrtums von gestern sein. |
|
Nach oben |
|
 |
Elektronix
Anmeldungsdatum: 29.06.2006 Beiträge: 742
|
Verfasst am: 05.01.2008, 12:29 Titel: |
|
|
Ist das Dein gesamter Code? Dann kein Wunder: Sobald der UDT eingerichtet ist, ist das Programm zuende und wird terminiert.
Setze einmal sleep darunter, dann wartet das Programm auf einen Tastendruck, bevor es beendet wird. _________________ Und die Grundgebihr is aa scho drin- DOS is jo nett. |
|
Nach oben |
|
 |
Lutz Ifer Grillmeister

Anmeldungsdatum: 23.09.2005 Beiträge: 555
|
Verfasst am: 05.01.2008, 12:36 Titel: |
|
|
Das alte Problem mit statischem und dynamischem Speicher.
Statischer Speicher: Schneller im Zugriff, begrenzt auf wenige MB (lässt sich aber auch einstellen, siehe "fbc -help". Ist: Alle Variablen etc. die mit "Dim" erzeugt werden.
Dynamischer Speicher: Bissle Langsamer, nur vom Betriebssystem (WinXP: 2GB) begrenzt.Ist: Jeder Speicherplatz, der auf einen Pointer alloziert wurde("Dim as ubyte ptr foobar = allocate(500 * 1024 * 1024) /* kein problem im dynamischen speicher, im statischen speicher unmöglich */")
Lutz Ifer _________________ Wahnsinn ist nur die Antwort einer gesunden Psyche auf eine kranke Gesellschaft. |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 05.01.2008, 15:00 Titel: |
|
|
aber so wie ich das gelesen habe, sind jetzt doch alle arrays dynamisch... heißt das nicht zwangsweise auch, dass sie im dynamischen speicher liegen?  _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
Wolfi30
Anmeldungsdatum: 17.08.2007 Beiträge: 38
|
Verfasst am: 05.01.2008, 16:35 Titel: |
|
|
Hi!
Vordimensionierte Sachen werden meines Wissens nach im Stackspeicher abgelegt, erst über einen Zeiger allokierte Bereich nutzt den dynamischen Speicher! Also im typ lieber einen Zeiger definieren und später dynamisch Speicher anlegen für die vielen Werte. Sonst wäre mancher Zeiger nutzlos und man könnte einfach drauflos arrays mit zig-MB dimensionieren
Gruß Wolfi |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 05.01.2008, 17:24 Titel: |
|
|
Mal allgemein: wenn sich das Programm ständig selbst beendet, würde ich es von der Konsole aus aufrufen, dann bekommst du eine Fehlermeldung zurück. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
Caran

Anmeldungsdatum: 11.03.2007 Beiträge: 290 Wohnort: Lörrach
|
Verfasst am: 05.01.2008, 20:41 Titel: |
|
|
Hey,
danke für die Antworten. Ich habs jetzt mit Pointern gelöst. Das klappt jetzt gut.
thx @all
MfG Caran _________________ Eine Erkenntnis von heute kann die Tochter eines Irrtums von gestern sein. |
|
Nach oben |
|
 |
Cherry
Anmeldungsdatum: 20.06.2007 Beiträge: 249
|
Verfasst am: 06.01.2008, 17:33 Titel: |
|
|
Nachdem du das in einem Type hast, wäre ein Constructor / Destructor und Properties hilfreich.
Code: | #define Error_Out_Of_Bounds Error 6 ' Runtime Error "Out-of-bounds array access"
Type test
Private:
v1_ as single ptr
v2_ as single ptr
Public:
declare property v1(index as integer) as single
declare property v1(index as integer, newvalue as single)
declare property v2(index as integer) as single
declare property v2(index as integer, newvalue as single)
declare constructor ()
declare destructor ()
end type
constructor test ()
v1_ = NEW single[10000]
v2_ = NEW single[10000]
end constructor
destructor test ()
deallocate(v1_)
deallocate(v2_)
end destructor
property test.v1(index as integer) as single
if index >= 0 and index <= 10000 then
return v1_[index]
else
Error_Out_Of_Bounds
end if
end property
property test.v1(index as integer, newvalue as single)
if index >= 0 and index <= 10000 then
v1_[index] = newvalue
else
Error_Out_Of_Bounds
end if
end property
property test.v2(index as integer) as single
if index >= 0 and index <= 10000 then
return v2_[index]
else
Error_Out_Of_Bounds
end if
end property
property test.v2(index as integer, newvalue as single)
if index >= 0 and index <= 10000 then
v2_[index] = newvalue
else
Error_Out_Of_Bounds
end if
end property |
Verwendung:
Code: | dim blub as test
blub.v1(33) = 3.2
blub.v1(2938) = 888.123
blub.v2(9999) = blub.v1(33) * blub.v1(2938)
print blub.v2(9999)
|
Ausgabe: 2841.994
Das mit dem IF index >= 0 AND index < 10000 kann man natürlich weglassen.
So kannst du test::v1 und test::v2 wie "echte" Arrays ansprechen.
mfG Cherry |
|
Nach oben |
|
 |
Caran

Anmeldungsdatum: 11.03.2007 Beiträge: 290 Wohnort: Lörrach
|
Verfasst am: 08.01.2008, 15:10 Titel: |
|
|
Ah oke auch ne Lösung, thx.
MfG Caran _________________ Eine Erkenntnis von heute kann die Tochter eines Irrtums von gestern sein. |
|
Nach oben |
|
 |
|