隐藏c#中不安全的代码行为

Evg*_*kov 2 c# unsafe

最近我写了一些树,想尝试不安全的代码.最后我做的都没有不安全但是在这段代码中找到了一些模糊(对我而言)的地方(对于更短的代码,我删除所有逻辑,所以所有代码看起来都毫无意义):

public static void Main() {
        EqClass a = new EqClass();
        a.AddElement(2, new record(3)); // *place1*
                    ...
            }
    unsafe struct node {
        public node* next;
        public record Value;
        public node(record value) {
            this = new node();
            this.Value = value;
        }
    }
    struct record {
        public int a;
        public record(int a) {
            this.a = a;
        }
    }
    unsafe class EqClass {
        node*[] last = new node*[3];
        public void AddElement(int classIndex, record element) {
            node a = new node(element);
            node* newNode = &a;
            last[classIndex]->next = newNode; // *place2*
        }
    }
Run Code Online (Sandbox Code Playgroud)

place2都可以,但是当方法AddElement结束时,在最后[2](我们放置一个元素)意外地出现了一些垃圾.但为什么?先感谢您.

Mar*_*ell 6

不是什么unsafe*适用.说真的:不要这样做.你在这里做的基本上是参考.为此:使用a class,而不是a struct.否则这对你非常非常伤害.

另外:这不是struct为了什么.看着struct像这样的可变性,瞬间告诉我你并不欣赏自己struct想要做的事情.

如果您想知道无意义值的来源:指针不是固定位置.对此的解决不是"哦,所以我需要固定它们".它是"使用引用,而不是指针".