我在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;
}
}
当我运行此代码它不保存内存意味着它创建Node temp = new Node();
结构的实例,只要它在AddNode内部它的内存是保存但是当我使用 Head <在此方法之外打印它时/ strong>它给我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();
的每个实例都保存在内存中。
问题: 为什么它不保存结构实例?
对不起,我的子标准英语。
答案 0 :(得分:1)
作为value type的结构实例在堆栈上创建,所以当AddNode
返回时,它会被清理掉,并留下指向内存中随机位置的指针。简单地创建指向变量的指针不足以使其保持活跃状态。