Abhängigkeit zweier zweidimensionaler Arrays

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Abhängigkeit zweier zweidimensionaler Arrays

    Hallo Leute :)

    Vielleicht übersehe ich da gerade etwas grundlegendes, aber ich sitze heute schon so lange an diesem Programm und bin mitlerweile kurz vorm Ende (sowohl was das Programm, aber auch was mich angeht)
    Hier der Fehler mal extrahiert:

    VB.NET-Quellcode

    1. Dim test(1, 1) As Integer
    2. test(0, 0) = 0
    3. test(0, 1) = 0
    4. test(1, 0) = 1
    5. test(1, 1) = 0
    6. Dim pTest(,) As Integer = test
    7. test(0, 1) = 1


    Zeile 9:
    test(1,0) = 1 ansonsten alle test(x,y) = 0
    pTest(1,0) = 1 ansonsten alle ptest(x,y) = 0

    soo und jetzt nach Zeile 10 (ich habe ja nur einen wert in test geändert), ist pTest(0,1) = 1
    Warum ??? :( - Ich habe die doch vorher gleichgesetzt :(

    Vielen Dank schonmal,
    und freundliche Grüße :)

    Felix

    PS: Der Titel ist müll, aber ich bin leider geistig nicht mehr ganz auf der höhe :D
    Da du gar nicht verstehst, wieso dieses Verhalten auftritt, solltest du dich in Referenz- und Werttypen einlesen.
    Ein Referenztyp (Arrays sind solche) beinhaltet nicht direkt den Wert, sondern nur den Zeiger auf den Wert im speicher.

    Im Fall von Dim pTest(,) As Integer = test kopierst du nur den Zeiger, somit zeigt nun die Variable pTest auf das selbe Array wie test, und wenn du mit einer dieser Variablen das Array änderst, zeigt natürlich auch die andere Variable auf das selbe, nun geänderte, Array.
    Du hast recht, das sollte ich :D Da ich aber heute noch fertig werden wollte, wäre eine weniger eigenständige Lösung für heute in Ordnung find' ich :)
    Artentus, deine Idee hat leider nicht geklappt, jemand noch eine andere ? :)

    Danke
    Ja kompilieren tut es bei mir auch ohne Probleme, die Sache ist nur die, dass hier jetzt, wenn ich das richtig verstanden habe, auch nur der Zeiger von newList auch auf oldList zeigt, sprich: wenn ich etwas in oldList ändere, ändert sich das auch in newList. Zumindest war das der Fall als ich es so probiert hatte.
    Ich weiß ja nicht was du machst, aber das hier funktioniert einwandfrei:
    dotnetfiddle.net/5k5OzI genau wie das: dotnetfiddle.net/f6CxrX

    Wenn du in der Liste allerdings Referenztypen hast, werden natürlich nur die Referenzen kopiert.
    Bedeutet: in einer Liste, die Elemente des Typs Object beinhaltet, werden dann ebenfalls nur die Referenzen weitergegeben - es werden keine Kopien angefertigt.
    Was du dann brauchst nennt sich DeepCopy.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „AliveDevil“ ()