2
我正在处理自定义调试引擎,当我将我的结构编组为IntPtr
Visual Studio崩溃(被调试的不是调试器)。Marshal.StructureToPtr崩溃Visual Studio
我的结构是多一点:
public struct DocumentContext : IDebugDocumentContext2, IDebugCodeContext2
{
private string _fileName;
//.....Implementation of interfaces
}
我的编组代码如下所示:
var documentContext = new DocumentContext(_node.FileName);
var size = Marshal.SizeOf(documentContext);
IntPtr ptrDocContext = Marshal.AllocHGlobal(size);
//This is what is crashing
//I don't have a chance to catch anything, it just craps out
//Event log says faulting dll is nt.dll
Marshal.StructureToPtr(documentContext, ptrDocContext, true);
我缺少的东西?
唉唉奏效。谢谢。我对那面旗帜有些模糊。 – 2010-07-27 00:53:13
文档中的免责声明有点微妙。它清楚地指出,如果你传递false,你可能会泄漏内存,但只有进一步下去才能澄清,如果结构不包含有效数据,那么传递true将失败。从本质上讲,它试图释放结构中字符串引用指向的内存,但指针无效,并且会崩溃。 – 2010-07-27 01:02:15