在C#struct指针中返回相同的地址

时间:2010-11-25 08:38:12

标签: c# pointers struct

我创建了一个结构指针,但每个新节点的调用都返回相同的地址。但我希望每次调用新节点都会返回不同的地址。有人可以帮忙吗?

public unsafe struct Node
{
    public int Data;
}
class TestPointer
{
    public unsafe Node* getNode(int i)
    {
        Node n = new Node();
        n.Data = i;
        Node* ptr = &n;
        return ptr;
    }
    public unsafe static void Main(String[] args)
    {
        TestPointer test = new TestPointer();
        Node* ptr1 = test.getNode(1);
        Node* ptr2 = test.getNode(2);
        if (ptr1->Data == ptr2->Data)
        {
            throw new Exception("Why?");
        }
    }
}

2 个答案:

答案 0 :(得分:4)

不要被Node n = new Node();语法所迷惑! Node是一个结构,n在堆栈上分配。您可以在同一环境中从同一个函数中调用getNode两次,因此您可以自然地获得指向同一堆栈位置的两个指针。一旦getNode返回,这些指针变得无效('悬空'),因为属于n的堆栈位置可能被不同的调用覆盖。简而言之:不要这样做。如果您希望CLR分配内存,请将Node设为一个类。

答案 1 :(得分:0)

n是否收集了垃圾?