次のように割り当てられたメモリを削除すると、「アクセス違反の読み取り場所」例外が発生します。
Visual Studio 2010 (ツールセット: v100) C++ コンパイラに対してコンパイルされたネイティブ dll があります。
マネージ ラッパーは、ポインターへの参照 (double *&myArray) をネイティブ dll 関数呼び出しの 1 つに渡します。これにより、動的配列が内部的に作成され、データが初期化されます。
ただし、マネージド ラッパーが delete [] myArray を呼び出してラッパーを解放しようとすると、例外がスローされます。ネイティブdllに解放を依頼すると、正常に動作しているようです。
例外が発生するのは、保護されたネイティブ dll アドレス空間が原因ですか? v90 ツールセットでネイティブ dll をコンパイルすると、ラッパーは例外なく配列を削除するように見えますが、これは奇妙なことです。
このようなユースケースでメモリを削除する最良の方法は何ですか?
//Managed.cpp
void InitializeData()
{
double *myArray;
myNativeObj->InitializeArray(myArray);
delete[] myArray; // <-- Exception here
}
//UnManaged.cpp
void InitializeArray(double *& myArray)
{
myArray = new double[get_length()];
//Initialize data to my array.
}
ありがとう、ムダシル