处理c#中的非托管内存
Dealing with unmanaged memory in c#
我在C#中使用本机C++dll,如下所示:
C++函数:
poly* f1(/*some input data*/);
double* f2(poly* p);
在c#中,我正在做:
(这是通过适当地使用不安全和固定的块来完成的,所以不用担心)
void* ptr = f1(/*input data*/);
double[] result = f2(ptr);
现在,如果我从f2
打印数据,我会得到一些损坏的垃圾值。有些值是正确的。我想知道,是因为把它保存在空指针ptr
中吗?还是这很好,而原因又是另一回事?
我猜marshaller无法自动将double*转换为double[],因为它不知道数组有多长,而且可能还有很多其他问题。理想情况下,你必须至少给我们C++中的头文件,C#中DllImported外部方法的声明,然后我们可以更深入地研究:)
相关文章:
- 开放 CV 中的动态内存分配,用于视频处理
- 是否可以通过每次在内存中仅保存一个平铺来处理完整的平铺 tiff 图像?
- 如何处理堆内存垃圾?
- 如何处理以下代码中的内存分配错误
- 将使用 4 或 8 个对齐规则将加载处理到内存中
- 错误 在测试.exe 0x76C9FD62时出现未经处理的异常:Microsoft C++异常:内存位置0x006FF8
- 当有大量内存分配时,如何处理C++编程中的异常
- 在 cplex c++ 音乐会 api++ 中处理非常大的问题而不会耗尽内存
- 如何在处理C++字符串时使用内存集
- QT-如何处理对话框的内存管理
- 通过函数来处理内存 - 这是正确的
- 如何在Qt中处理子类中的动态内存分配
- 如何在将指针传递给库函数时处理内存管理
- 嵌套的 QVector 指针内存处理
- 内存处理问题
- C++std::string内部内存处理
- 错误:C++文字内存处理错误
- 具有动态分配内存的类的内存处理
- 异常安全的COM内存处理
- 内存处理(即函数发布)如何与 Direct3D 配合使用