Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Begrenzte Anzahl an Variablen?

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Caran



Anmeldungsdatum: 11.03.2007
Beiträge: 290
Wohnort: Lörrach

BeitragVerfasst am: 05.01.2008, 11:51    Titel: Begrenzte Anzahl an Variablen? Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Elektronix



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 05.01.2008, 12:29    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Lutz Ifer
Grillmeister


Anmeldungsdatum: 23.09.2005
Beiträge: 555

BeitragVerfasst am: 05.01.2008, 12:36    Titel: Antworten mit Zitat

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 böse Ifer
_________________
Wahnsinn ist nur die Antwort einer gesunden Psyche auf eine kranke Gesellschaft.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 05.01.2008, 15:00    Titel: Antworten mit Zitat

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? verwundert
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Wolfi30



Anmeldungsdatum: 17.08.2007
Beiträge: 38

BeitragVerfasst am: 05.01.2008, 16:35    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 05.01.2008, 17:24    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Caran



Anmeldungsdatum: 11.03.2007
Beiträge: 290
Wohnort: Lörrach

BeitragVerfasst am: 05.01.2008, 20:41    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Cherry



Anmeldungsdatum: 20.06.2007
Beiträge: 249

BeitragVerfasst am: 06.01.2008, 17:33    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Caran



Anmeldungsdatum: 11.03.2007
Beiträge: 290
Wohnort: Lörrach

BeitragVerfasst am: 08.01.2008, 15:10    Titel: Antworten mit Zitat

Ah oke auch ne Lösung, thx.

MfG Caran
_________________
Eine Erkenntnis von heute kann die Tochter eines Irrtums von gestern sein.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz