Cで使用するいくつかの関数をエクスポートするモジュールをC#で作成します。 C < - > C#の間で渡される構造体のために、いくつかのメモリを割り当てる必要があります。mallocとMarshal.AllocHGlobalとの間に違いがありますか?
私はmallocで行い、C#ではMarshal.AllocHGlobal()(Cに渡す管理されていないメモリを割り当てる)で行います。
Marshal.AllocHGlobalで割り当てられたメモリをfree()し、mallocで割り当てられたMarshal.FreeHGlobal()でメモリを解放すると問題はありますか?
おかげ
すべてのお返事ありがとう – bzamfir
ありがとう。実際に私がしたのは、libに渡された構造体を作成するときに、呼び出されたプログラムで使用することをお勧めしている、libのエクスポートされた関数AllocateMemとFreeMemを作成することでした。しかし、私はこのルールを遵守しておらず、malloc(または何か他のもの)で割り当てられたいくつかの構造体を自分のlibに渡すことに疑問を抱いていました。 – bzamfir
問題は、構造体には、私は割り当てる必要があり、呼び出しコードに渡す必要があります(文字列)の文字へのいくつかのポインタがあります。呼び出し元のコードがfree()でメモリを解放しようとするとどうなりますか?だからこそ私はFreeHGlobalで実装したFreeMemを作成し、progを呼び出す際にメモリを解放するために使用しています。それ以外の場合は、コードを呼び出すプログラマの責任です。 – bzamfir