Ant*_*ony 7 c# memory unmanaged
我有一个大型的c代码库,用于将其结果写入文件.我将它转换为通过float*数组将其数据返回到类似的C++程序(以避免常量文件I/O):
float* mgrib(...)
Run Code Online (Sandbox Code Playgroud)
这在c ++中运行良好,我可以"释放"内存.我设法通过以下方式将数据正确地导入C#:
IntPtr pointer = mgrib(...);
float[] result = new float[ size ];
Marshal.Copy( pointer, result, 0, size );
Marshal.FreeCoTaskMem( pointer );
Run Code Online (Sandbox Code Playgroud)
这是在循环内,因为必须从函数中提取许多字段.如果它少于256个字段,那么效果很好.如果它更多,它会在没有警告的情况下崩溃.如果我通过它正确运行文件然后运行另一个(总计超过256)它崩溃.我远不是CS专家,但256似乎不仅仅是巧合.
我很欣赏任何见解.谢谢.
首先,您确定C++库是否使用了分配返回值缓冲区CoTaskMemAlloc,以便您可以使用它来释放它Marshall.FreeCoTaskMem?有各种内存(de)分配功能,你不能自由混合它们.
这就是为什么库经常被设计为"在单侧"分配和释放内存的原因,例如使用类似的东西
void mgrib(..., float *buff, int buffsize);
Run Code Online (Sandbox Code Playgroud)