我对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();
}
答案 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)
}