Cześć,
Chciałem prosić Was o jakąś wskazówkę dotyczącą problemu na który się natknąłem w czasie pisania programu na algorytmy (piszę o jaki przedmiot chodzi, gdyż zaraz pojawiłyby się pytania o to po co w ogóle zawracam sobie głowę unsafe contextem - zawracam, bo tak każą i już ; ) ). Sprawa wygląda następująco:
Mam typ struct:
public unsafe struct NODE
{
private int value;
private NODE* next;
public NODE(int value)
{
this.value = value;
this.next = null;
}
public NODE* Next
{
get { return this.next; }
set { this.next = value; }
}
public int Value
{
get { return this.value; }
set { this.value = value; }
}
}
Listę Nodów:
public unsafe class MYLIST
{
public NODE* head;
public MYLIST()
{
this.head = null;
}
public void Add(int valueToAdd)
{
NODE tmp = new NODE(valueToAdd); // <=== *)
if (this.head != null)
tmp.Next = this.head;
this.head = &tmp;
}
public void List()
{
NODE* p = this.head;
if (this.head != null)
{
while (p != null)
{
Console.Write("[{0}]", p->Value);
p = p->Next;
}
}
else
Console.WriteLine("[Lista pusta]");
}
}
oraz użycie tychże typów:
// ...
MYLIST ml = new MYLIST();
ml.Add(1);
ml.Add(1);
ml.List();
// ...
Problem polega na tym, że nie działa funkcja Add() klasy MYLIST. Dzieje się tak dlatego, że (jak sądzę) nie alokuję pamięci dla nowo wstawianego węzła (oznaczyłem to miejsce gwiazdką *) ). Nie wiem niestety jak to zrobić w C#. C oferował malloca, C# oferuje co prawda stackalloc, ale nie wiem jak w tej konkretnej sytuacji go wykorzystać i czu w ogóle jest to poprawny trop... Będę wdzięczny za wszelkie propozycje ; )