gpt4 book ai didi

c++ - 删除数组时出现访问冲突异常

转载 作者:太空狗 更新时间:2023-10-29 21:02:28 25 4
gpt4 key购买 nike

删除分配的内存时出现“访问冲突读取位置”异常,如下所示。

我有一个针对 Visual Studio 2010(工具集:v100)C++ 编译器编译的 native dll。我有一个针对它的托管 dll 包装器,它是针对工具集 v90 编译的,因为我想以 .net 2.0 为目标。

托管包装器将指针 (double *&myArray) 的引用传递给本地 dll 函数调用之一,该函数调用在内部创建动态数组并初始化数据。

但是,当托管包装器尝试通过调用 delete [] myArray 释放包装器时,它会抛出异常。如果我要求 native dll 释放它,它似乎工作正常。

是不是因为 protected native dll 地址空间导致我出现异常?如果我使用 v90 工具集编译 native dll,包装器似乎会毫无异常(exception)地删除数组,这很奇怪。

在这种情况下删除内存的最佳方法是什么?

//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.
}

谢谢,穆达西尔

最佳答案

您在一个 C++ 运行时 (v100) 中分配并在另一个 (v90) 中释放;那只是自找麻烦。

您应该在调用 new[] 的同一个 DLL 中调用 delete[](或者,至少从另一个使用相同运行时库的 DLL)。这是不是很复杂很乱?是的;这就是发明 COM(然后是 .NET)的原因。

关于c++ - 删除数组时出现访问冲突异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15286300/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com