删除用第一个指针和元素数定义的uint8_t数组

本文关键字:uint8 数组 定义 第一个 指针 元素 删除 | 更新日期: 2023-09-27 18:24:03

我正在从我的c#程序中调用一个c++dll。看起来,一旦一个变量被传递给非托管代码,C#就不想对它做任何事情,结果我的程序正在疯狂地泄漏内存。

这是代码的C#部分:

    byte[] bytes = MyData;
    int array_lenght = bytes.Length;
    DataProcessor(bytes, array_lenght);

数据处理器定义为

[DllImport("Processor", EntryPoint = "DataProcessor")]
public static extern void DataProcessor(byte[] array, int ArrayElementCount);

以下是DataProcessor函数的DLL端:

void DataProcessor (uint8_t* InputArray, int ArrayElementCount)
// do some stuff here

现在看来我需要从DLL中删除这个数组(InputArray),但是我找不到方法。我试过之类的东西

delete *(InputArray + i) // inside a for loop

将数组映射到这样的向量并清除

std::vector<uint8_t> fckn_vector(InputArray, InputArray + ArrayElementCount);
fckn_vector.clear();

我百分之百肯定有一种非常简单的方法可以做到这一点,但是我不擅长C++。

删除用第一个指针和元素数定义的uint8_t数组

您可以使用Marshal.FreeCoTaskMem方法:

Marshal.FreeCoTaskMem(InputArray);