C#使用Char *正确处理结构

时间:2018-05-08 21:03:54

标签: c# unmanaged intptr

我对C#很陌生,而且我在发布非托管资源方面遇到了麻烦。对于函数CharPtrToString,是否需要释放IntPtr?另外,调用List<是否安全? MyStruct> .clear()没有导致内存泄漏?

JSlider speed = new JSlider(0, 80); speed.setValue(0);
setting speedSett = new setting("speed", speed);
if (speeSett.getMain() instanceof JSlider) {
  JSlider slider = (JSlider) speedSett.getMain(); // Recommend to access from getter instead of direct access
  slider.getValue();
}

1 个答案:

答案 0 :(得分:0)

如果可能的话,在分配charPointer变量时,你应该尝试使用" fixed"关键词。这修复了指针,因此垃圾收集不会清理指针。然后你也不需要释放它,它会在固定块之后自动释放。这取决于您的其他代码。

https://docs.microsoft.com/en-US/dotnet/csharp/language-reference/keywords/fixed-statement

所以看起来像这样

 fixed(char* charPointer = ... )
 {
    IntPtr ipp = (IntPtr)charPointer;
    string s = Marshal.PtrToStringAnsi(ipp)
 }