gpt4 book ai didi

c# - .NET 4 : Can the managed code alone cause a heap corruption?

转载 作者:可可西里 更新时间:2023-11-01 08:43:50 25 4
gpt4 key购买 nike

我的多线程托管程序中出现堆损坏。做一些测试我发现只有当后台线程在程序中处于事件状态时才会发生损坏(它们是可切换的)。这些线程使用一些第 3 方组件。

在检查线程和第 3 方组件(使用 .NET Reflector)的代码后,我发现它们都是托管的,即没有“不安全”或“DllImportAttribute”或“P/Invoke” .似乎纯托管代码导致堆损坏,这可能吗?

更新

除了使用 Marshal 类之外,是否有可能在线程未正确同步的情况下破坏堆?一个例子将不胜感激。

最佳答案

绝对有可能在不使用任何不安全代码的情况下破坏堆。 Marshal 类在这里是你的 friend /敌人

IntPtr ptr = new IntPtr(50000);  // Random memory
byte[] b = new byte[100];
Marshalp.Copy(b, 0, ptr, 100);

这有效地将 100 个连续的 0 复制到地址 50000 处的堆中。

另一种方法是使用显式结构布局

[StructLayout(LayoutKind.Explicit)]
struct S1
{
[FieldOffset(0)]
internal string str;

[FieldOffset(0)]
internal object obj;
}

S1 s = new S1();
s.obj = new Program();
s.str.Trim(); // Hope that works ... :)

关于c# - .NET 4 : Can the managed code alone cause a heap corruption?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7574153/

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