最近我写了一些树,想尝试不安全的代码.最后我做的都没有不安全但是在这段代码中找到了一些模糊(对我而言)的地方(对于更短的代码,我删除所有逻辑,所以所有代码看起来都毫无意义):
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](我们放置一个元素)意外地出现了一些垃圾.但为什么?先感谢您.
这不是什么unsafe和*适用.说真的:不要这样做.你在这里做的基本上是参考.为此:使用a class,而不是a struct.否则这对你非常非常伤害.
另外:这不是struct为了什么.看着struct像这样的可变性,瞬间告诉我你并不欣赏自己struct想要做的事情.
如果您想知道无意义值的来源:指针不是固定位置.对此的解决不是"哦,所以我需要固定它们".它是"使用引用,而不是指针".
| 归档时间: |
|
| 查看次数: |
147 次 |
| 最近记录: |