Escribo un módulo en C# que exporta algunas funciones para usar en C. Necesito asignar algo de memoria para que algunas estructuras pasen entre C < -> C#.Cualquier diferencia entre malloc y Marshal.AllocHGlobal?
Lo que asigno en C Lo hago con malloc, y en C# lo hago con Marshal.AllocHGlobal() (para asignar memoria no administrada para pasarla a C).
¿Hay algún problema si libero() la memoria asignada con Marshal.AllocHGlobal, y si libero la memoria con Marshal.FreeHGlobal() que se asignó con malloc?
Gracias
Gracias por todas las respuestas – bzamfir
Gracias. En realidad, lo que hice fue crear en mi lib las funciones exportadas AllocateMem, y FreeMem, que recomendé utilizar al llamar programas, al crear estructuras que se pasan a lib. Pero me preguntaba si uno no está cumpliendo con esta regla y le paso a mi lib algunas estructuras asignadas con malloc (o cualquier otra cosa), ¿qué debería pasar? – bzamfir
El problema es que las estructuras tienen algunos punteros a char (para cadenas) que tengo que asignar y pasar al código de llamada. ¿Y qué ocurre si el código de llamada intenta liberar esa memoria con free()? Es por eso que creé FreeMem, que implementé con FreeHGlobal, para ser utilizado para liberar memoria en prog. De lo contrario, es responsabilidad del programador del código de llamada. – bzamfir