gpt4 book ai didi

c# - 获取 .NET 对象的内存地址 (C#)

转载 作者:太空狗 更新时间:2023-10-29 19:55:50 27 4
gpt4 key购买 nike

我正在尝试追踪 mono 运行时中的一个错误,其中一个变量似乎被分配给一个有效对象,然后又被重新分配给一个伪造的对象,特别是

//early in code I allocate, fine
var o = new object(); // valid allocation
// later in code this is called, not fine
lock(o) // <- is triggering bug due to "o" now referencing a nonsense memory location.

我想知道什么时候对“o”的引用变得毫无意义,为此我正在寻找一种方法来确定 C# 代码中不同时间点“o”的地址。我知道这与其他问题类似,答案是“不要这样做,因为有 GC”,但 GC 不起作用,所以我需要一个解决方法。

有谁知道如何在 C# 中确定单声道对象的地址?可以链接非托管代码或其他任何内容。 (对诊断主要问题的方法的任何其他线索表示赞赏)。

最佳答案

您应该能够使用 GCHandle 构造来完成此操作。

GCHandle objHandle = GCHandle.Alloc(obj,GCHandleType.WeakTrackResurrection);
int address = GCHandle.ToIntPtr(objHandle).ToInt32();

其中“obj”是您要获取其地址的对象。

关于c# - 获取 .NET 对象的内存地址 (C#),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25410158/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com