Unhandled Memory Exception Error

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

 

FredFeuerstein

Betreff: Unhandled Memory Exception Error

BeitragDo, Jan 03, 2008 14:56
Antworten mit Zitat
Benutzer-Profile anzeigen
servus,
habe folgendes, mir absolut unbegreifliches, problem:
Code: [AUSKLAPPEN]

SuperStrict

Type Test
    Field test2:Test2

    Method New()
        Self.test2 = New Test2
    EndMethod
EndType

Type Test2
    Field test3:Int
EndType

Print ("HMM")
Local t:Test = New Test
Print ("OK")

wenn ich das obige codestück compilieren möchte bekomme ich folgendes, von meinem compiler, gesagt:
Zitat:

HMM

──►BlitzMax Debug Report:
Unhandled Exception:Unhandled Memory Exception Error

└─► End of Debug Report.

und ich werde auf die zeile
Code: [AUSKLAPPEN]

        Self.test2 = New Test2

verwiesen.
verstehe nur leider absolut nicht wie hier ein speicherfehler verursacht werden kann Confused
bin total verwirrt!
 

Dreamora

BeitragDo, Jan 03, 2008 15:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Seh da auch keinen Grund das etwas einen Speicherfehler verursachen könnte / müsste, ausgenommen dein RAM ist total voll ...

Auch wenn das banane erscheint, du könntest die EndX auseinander nehmen, sprich End Method und End Type statt sie zusammen schreiben.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

maximilian

BeitragDo, Jan 03, 2008 15:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Böse Falle! BlitzMax ist nicht case-sensitive (es wird nicht zwischen Groß- und Kleinschreibung unterschieden).

Test2 und test2 sind also das gleiche, damit verwirrst du den Compiler ziemlich.
Variety is the spice of life. One day ignore people, next day annoy them.
 

Dreamora

BeitragDo, Jan 03, 2008 15:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Stimmt das ist mir garnet aufgefallen.

Jeder Name darf nur 1x im gesamten System vorkommen. Egal ob als Variable, Funktion oder Type. Sobald er reserviert ist, ist er reserviert.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

FredFeuerstein

BeitragDo, Jan 03, 2008 15:26
Antworten mit Zitat
Benutzer-Profile anzeigen
jo danke, habt recht!
selstam ist nur das ich so schon die ganze zeit schreibe (gewohnt von anderen sprachen) und es bis jetzt funktioniert hat Confused
war schon kurz vorm verzweifeln Smile
 

Dreamora

BeitragDo, Jan 03, 2008 16:00
Antworten mit Zitat
Benutzer-Profile anzeigen
naja hättest du nur fields der types so genannt wärs auch kein problem gewesen. Dummerweise hast du mit deinem konstrukt dafür gesorgt, dass der Identifier "test2" im gleichen Definitionsbereich für 2 verschiedene Dinge stand was BM net verträgt.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

ChristianK

BeitragDo, Jan 03, 2008 16:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Es empfiehlt sich, vor Typenamen ein 'T' zu schreiben: 'Type TTest'. Dann passiert sowas nicht. Wink

Davon abgesehen sollte der Compiler das doch eigentlich schon beim kompilieren erkennen, oder nicht?
Bei "Local test:Test" gibt er schließlich auch 'Duplicate identifier' aus.
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT
 

Dreamora

BeitragDo, Jan 03, 2008 16:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist dublicate identifier weil du existierende Variablen damit hast.

Aber obiges ist etwas was im parser tree ex und hopp geht. Sollte er eigentlich auch nen gescheiten fehler bringen ja, tut er aber scheinbar immer noch net.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

klepto2

BeitragFr, Jan 04, 2008 14:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Abgesehen von den obigen Tipps, die man beachten sollte gibt es noch eine weitere Möglichkeit das Programm zum laufen zu bringen:

Code: [AUSKLAPPEN]


SuperStrict

Type Test
    Field test2:Test2

    Method New()
        Self.test2 = New .Test2
    EndMethod
EndType

Type Test2
    Field test3:Int
EndType

Print ("HMM")
Local t:Test = New Test
Print ("OK")


Ich habe einen '.' for das Test2 gesetzt (in der Zeile: ' Self.test2 = New .Test2'). Durch den Punkt verläßt BMax den Scope des Types und nimmt stattdessen den mainscope. Dadurch kann man das Problem auch umgehen.
Matrix Screensaver
Console Modul für BlitzMax
KLPacker Modul für BlitzMax

HomePage : http://www.brsoftware.de.vu

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group