我在C#中实现链表,所以我使用两种方法
第一种方法
unsafe public struct Node
{
public int info;
public Node* link;
}
这是添加节点方法
public void AddNode( int a)
{
Node temp = new Node();
temp.info = a;
if (Head == null)
{
Head = Current = &temp;
}
else
{
(*Current).link = &temp;
Current = &temp;
}
}
当我运行此代码时,它不保存内存意味着只要它在AddNode内,它就会创建Node temp = new Node();
结构的实例。它的内存是保存的,但当我使用Head在该方法外部打印它时,它会给我NullRefrenceException
第二种方法
通过使用类和对象
public class Node
{
public int info;
public Node link;
}
class Linked_list
{
public Node Head;
public Node Current;
public void insert_element_linkedlist( int a)
{
Node temp = new Node();
temp.info = a;
if (Head == null)
{
Head = Current = temp;
}
else
{
Current.link = temp;
Current = temp;
}
}
}
第二种方法是完美工作的,这意味着临时节点Node temp = new Node();
的每个实例都保存在内存中。
问题:为什么不保存结构实例?
对不起,我的英语不符合标准。
结构实例是一种值类型,在堆栈上创建,因此当AddNode
返回时,它会被清除,并且留下指向内存中随机位置的指针。仅仅创建一个指向变量的指针是不足以使其保持活力的。