私は、次に関する質問のカップルを持っている:DllImportによって返されたIntPtrが指す文字列のメモリを手動で解放する必要がありますか?
文字列のメモリが割り当てられpVersion
によって指される
[DllImport("libmp3lame.dll", CharSet = CharSet.Ansi)]
static extern IntPtr get_lame_version();
public static string GetLameVersion()
{
IntPtr pVersion = get_lame_version();
string version = Marshal.PtrToStringAnsi(pVersion);
return version;
}
- ?
pVersion
が有効範囲外になると、このメモリは自動的に解放されますか?- はいの場合、どうなりますか?
- いいえの場合、メモリを解放するにはどうすればよいですか?
1.呼び出すライブラリによって異なります。 2.呼び出すライブラリによって異なります。 3.呼び出すライブラリによって異なります。 4.呼び出すライブラリによって異なります。 ... – Nick
@Nick、説明できますか? –
APIと同様に、誰がメモリ割り当てと割り当て解除を担当するのかを知る必要があります。これは、ドキュメンテーションを通じて、または問題の図書館のソースコードを見ることによって行われます。 – Nick