C#调用C++的DLL,二级指针释放的有关问题

C#调用C++的DLL,二级指针释放的问题。
C++中的一个二级指针(unsigned char**) 传入C#中,怎么在C#中释放这个二级指针?C#中用的 ref IntPtr类型与unsigned char**对应。
我是在C++中写了一个释放内存的导出函数,C#中调用这个函数来释放内存,但是好像释放的不干净,如下:
void releasememory(unsigned char** p)
{
if(*p != NULL)

delete[] *p;
*p = NULL;
}
}
------解决思路----------------------
不要说在 C# 中,你必须先知道就是在 C 中怎么释放这个指针。
哪怕同样是 C 的非托管内存, new 或 malloc 之类的编译器的内存函数都是不能跨模块的。

------解决思路----------------------
一说是直接用 Dispose 释放
一说是在c或c++中显式释放

我都晕了
------解决思路----------------------
看你的情况都是自己写的函数也不一定非要定义成  char ** 吧
Marshal.AllocHGlobal(1024);
Marshal.FreeHGlobal(p);
另外必要情况可以考虑 unsafe 指针
------解决思路----------------------
首先你要保证C中调用这个能释放干净,只要C中可以,C#绝对可以