【发布时间】:2023-01-12 10:12:39
【问题描述】:
我正在尝试完成创建 XOR 链表的挑战。但是,我无法完成它,因为每次我分配一个节点对象时,它都使用与前一个相同的内存块。
var list = new ListXOR();
list.Add(1);
list.Add(2);
list.Add(3);
list.Add(4);
Console.WriteLine("Done.");
class ListXOR
{
private readonly List<Node> _nodes = new();
public void Add(int value)
{
Node node = new(value);
_nodes.Add(node);
unsafe
{
Console.WriteLine("Address of new node {0}", (ulong)&node);
}
}
private class Node
{
public int value;
public Node(int newValue) => value = newValue;
}
}
此代码在控制台中显示如下内容:
Address of new node 849654375800
Address of new node 849654375800
Address of new node 849654375800
Address of new node 849654375800
Done.
您还需要将其添加到您的*.csproj 文件中。
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
为什么会这样?有办法防止吗?
【问题讨论】:
-
您实际上并没有获得节点的内存地址。您只是获取
node变量的地址,不出所料,每次都是相同的。请参阅this 了解如何正确执行此操作。
标签: c# .net memory-management allocation