【发布时间】:2016-01-25 08:11:12
【问题描述】:
我是 C++ 的初学者,目前我正在为回调函数编写代码以从 CLI Wrapper 连续获取字节数组。我的代码
C++
**Declaration:**
void ReceivedSensor1ByteArray(unsigned char values[], int length);
**Calling:**
GetSensor1ColorsFromCsharp(&ReceivedSensor1ByteArray);
**Definition:**
byte* sensor1bytevalues;
void ReceivedSensor1ByteArray(unsigned char values[], int length)
{
if(length > 0)
{
sensor1bytevalues=new byte[length];
for(int i = 0; i < length; i++)
{
sensor1bytevalues[i]=values[i];
}
}
}
**CLI Wrapper**
**Decalration:**
public ref class SampleWrapper
{
SampleWrapper(void)
{
kinectSocketwrapperObj->ReadBytesValues+=gcnew CLIWrapperClass::ByteValuesReady(this,&Wrapper::SampleWrapper::ByteArrayReadyMethod);
}
public:
CLIWrapperClass ^ kinectSocketwrapperObj;
static SampleWrapper ^ Instance = gcnew SampleWrapper();
void ByteArrayReadyMethod(array<Byte> ^ values);
**Definition:**
GetByteArrayCallback byteArrayCallback;
__declspec(dllexport) void GetSensor1ColorsFromCsharp(GetByteArrayCallback cb)
{
byteArrayCallback = cb;
CLIWrapperClass ^KinectServerWrapper = SampleWrapper::Instance->kinectSocketwrapperObj;
KinectServerWrapper->ReceiveSensor1colors();
}
void SampleWrapper::ByteArrayReadyMethod(array<Byte> ^ values)
{
Byte *nativeValues = new Byte[values->Length];
copyManagedByteToUnfloatArray(nativeValues, values);
byteArrayCallback(nativeValues, values->Length);
}
void copyManagedByteToUnfloatArray(Byte target[], array<Byte> ^ values)
{
int maxSize = values->Length;
if ( maxSize > 0)
{
for (int index = 0; index < maxSize; index++ )
{
target[index] = (float)values[index];
}
}
}
实际上,我通过 CLI Wrapper 类从 C# 接收字节数据并传递给 C++ 应用程序以便 DisplayImageFrame。当我继续调用 GetSensor1VerticesFromCSharp 函数时,系统内存在 10 分钟后增加,系统被挂起。请建议我解决这个问题。
谢谢, 基鲁巴
【问题讨论】:
-
sensor1camevalues 它只是一个变量,我会正确清除它。实际上我认为 CallBack 函数占用了太多内存“ typedef void (*GetByteArrayCallback) (unsigned char values[], int length);” __declspec(dllexport) void GetSensor1ColorsFromCsharp(GetByteArrayCallback cb);建议我如何清除回调函数
标签: c# c++ memory-management memory-leaks command-line-interface