Czołem. Bawię się teraz wskaźnikami w C# i za cholerę nie mogę pojąć, czemu instancja obiektu List przechowująca wskaźniki do poprzedniego i następnego węzła, po dodaniu wartości do wskaźnika węzła o nazwie Head, w mainie w instancji List wywala mi jakieś dziwne adresy w pamięci mimo że tam null pakuje. Może ktoś zna temat wskaźników w C# i pomoże :D Na kodzie łatwiej będzie zrozumieć:
namespace List
{
unsafe public struct Node
{
public Node(int value, Node* prev = null, Node* next = null)
{
Value = value;
PreviousNode = prev;
NextNode = next;
}
public int Value;
public Node* PreviousNode;
public Node* NextNode;
}
unsafe public class List
{
public Node* Head;
public Node* Tail;
public int Count;
public List()
{
Head = Tail = null;
}
unsafe public void Add(int value)
{
if (Head == null)
{
Node temp = new Node(value);
Head = &temp;
}
else
{
if (Tail == null)
{
*Tail = new Node(value, Head, null);
Head->NextNode = Tail;
}
else
{
Node* temp = Tail;
*Tail = new Node(value, temp, null);
}
}
Count++;
}
}
}
namespace ListApp
{
class Program
{
unsafe static void Main(string[] args)
{
Console.WriteLine("Hello World!");
List.List list = new List.List();
list.Add(1); //przy debugowaniu w klasie List tutaj jest ok, we wskaźniku jest obiekt z nullami do następnego i poprzedniego węzła
Console.WriteLine(list.Count); /* w tym momencie list.Head->NextNode ma przypisane jakieś przypadkowe adresy w pamięci i każdy ten obiekt ma kolejny randomowy NextNode z pamięci i randomową wartość */
Console.WriteLine(list.Head->Value);
Console.ReadKey();
}
}
}