删除分配的内存时出现“访问冲突读取位置”异常,如下所示。
我有一个针对 Visual Studio 2010(工具集:v100)C++ 编译器编译的本机 dll。我有一个托管 dll 包装器,它是针对工具集 v90 编译的,因为我想针对.net 2.0。
托管包装器将对指针 (double *&myArray) 的引用传递给本机 dll 函数调用之一,该函数调用在内部创建一个动态数组并初始化数据。
但是,当托管包装器尝试通过调用 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.
}
谢谢,穆达西尔