Nullpointer als Rückgabewert -> Wie kann das sein?

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

M0rgenstern

Betreff: Nullpointer als Rückgabewert -> Wie kann das sein?

BeitragDi, Nov 20, 2012 16:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Leute,

Ich habe grade zum Test ein Programm zusammengehackt, das eine Liste von sortierten Arrays zu einem sortieren Array zusammen merged und dann zurück gibt.
Aber aus irgendeinem Grund, der sich mir leider total entzieht, gibt die Funktion immer einen Nullpointer zurück.
Obwohl ich unmittelbar vor der Rückgabe das zurückzugebende Objekt nochmal explizit auf Null prüfe.
Entweder, ich habe Tomaten auf den Augen, oder... Ja, Keine Ahnung. Ich will nicht direkt "BUG" schreien.

Also, hier ist die Funktion:
BlitzMax: [AUSKLAPPEN]
Function mergeLists:TIntArray(arrayList:TList)
For Local ar:TIntArray = EachIn arrayList
DebugLog(ar.ToString())
Next
If(arrayList.Count() = 1) Then
DebugLog("ListFirst: " + (TIntArray(arrayList.First()) = Null))
Local array:TIntArray = TIntArray(arrayList.First())
DebugLog("Ar null: " + (array = Null))
Return array
EndIf

Local newList:TList = New TList
For Local index:Int = 0 Until arrayList.Count() - 1
newList.AddLast(merge(TIntArray(arrayList.ValueAtIndex(index)), ..
TIntArray(arrayList.ValueAtIndex(index + 1))))
Next

DebugLog("New Step...")
mergeLists(newList)
End Function


Und hier der Aufruf mit dem Test:
BlitzMax: [AUSKLAPPEN]
Local list:TList = New TList

Local ar1:TIntArray = New TIntArray.IntArray([1, 50, 90])
Local ar2:TIntArray = New TIntArray.IntArray([5, 60, 100])

list.AddLast(ar1)
list.AddLast(ar2)

Local resArray:TIntArray = mergeLists(list)
DebugLog("Result null: " + (resArray = Null))

Anmerkung: TIntArray ist einfach nur ein Container für integer-Arrays, weil man primitive Datentypen ja nicht in Listen stecken darf.

Die Ausgabe, die ich jetzt in der Konsole erhalte ist:
Zitat:
DebugLog:[1, 50, 90]
DebugLog:[5, 60, 100]
DebugLog:New Step...
DebugLog:[1, 5, 50, 60, 90, 100]
DebugLog:ListFirst: 0
DebugLog:Ar null: 0
DebugLog:Result null: 1


Kann mir bitte jemand erklären, was da los ist?
Ich teste ja unmittelbar vor der Rückgabe ob das Objekt null ist. Und direkt nach der Rückgabe ist es null.

Lg,
M0rgenstern

kog

BeitragDi, Nov 20, 2012 17:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Man kann ihn ja nicht Testen, aber was auffällt ist, das du nur ein array zurückgibst, wenn:
Code: [AUSKLAPPEN]
   If(arrayList.Count() = 1) Then
      DebugLog("ListFirst: " + (TIntArray(arrayList.First()) = Null))
      Local array:TIntArray = TIntArray(arrayList.First())
      DebugLog("Ar null: " + (array = Null))
      Return array
   EndIf



jedoch wenn es mehrere sind keine Rückgabe erteilst:
Code: [AUSKLAPPEN]
   DebugLog("New Step...")
   mergeLists(newList)
End Function


Daher egal wie es ausgeht, das Resultat wird ja nicht zurück geliefert.

so sollte es doch gehen?
Code: [AUSKLAPPEN]
   
   DebugLog("New Step...")
   Local a:TIntArray=mergeLists(newList)
   Return a
End Function
Windows 7 Home Premium 64bit
CPU: Intel Core i5 3450 Ivy Bridge
GPU: HIS HD 4870 1GB GDDR5
RAM: 4x 4GB DDR3-SDRAM Dual Channel

M0rgenstern

BeitragDi, Nov 20, 2012 19:30
Antworten mit Zitat
Benutzer-Profile anzeigen
oO....


Verdammt vielen Dank.
Genau das ist es.
Natürlich muss ich den rekursiven Funktionsaufruf zurückgeben, sonst kommt, außer im Trivialfall nichts gescheites bei raus.


Das ist jetzt schon peinlich...^^

Dankeschön.

kog

BeitragMi, Nov 21, 2012 11:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Ach oft verzwifelt man an den kleinsten Sachen, weil man vor lauter Buchstaben kaum noch richtig sieht;)
Windows 7 Home Premium 64bit
CPU: Intel Core i5 3450 Ivy Bridge
GPU: HIS HD 4870 1GB GDDR5
RAM: 4x 4GB DDR3-SDRAM Dual Channel

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group