回调函数中的内存泄漏C++
Memory Leak in C++ CallBack Function
我是C++初学者,目前我正在为回调函数编写代码以从 CLI 包装器连续获取字节数组。我的代码
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包装类从C#接收字节数据,并传递给C++应用程序以显示图像帧。 当我调用GetSensor1VerticesFromCSharp函数时,系统内存在10分钟后增加,系统挂起。请建议我解决这个问题。
谢谢基鲁巴
sensor1camevalues 的寿命是多少?目前尚不清楚它是类的一部分,还是要复制到全局数组中,这最多只能使管理它的生命周期变得困难。
切换到使用像 std::vector
这样的容器,它将为您处理为传感器值分配内存,或者使用共享指针(如 std::unique_ptr<float []>
)来初始化动态数组。阅读RAII/内存管理及其工作原理非常重要,因为这是C++的关键概念。
如果你
是关于"真正的"c ++,而不是.Net one,你应该用"删除"来释放每个分配有"new"的内存块。
即:
sensor1camevalues=new float[length]; // memory allocation
delete[] sensor1camevalues; // deallocation
相关文章:
- valgrind-hellgrind与泄漏检查的结果不同
- 从构造函数抛出异常时如何克服内存泄漏
- malloc() 可能出现内存泄漏
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 尽管遵循了规则,内存泄漏在哪里
- 为什么调用堆栈数组会导致内存泄漏
- 在简单示例中,Python3 + ctypes 回调会导致内存泄漏
- 使用模板类的自定义列表类型中的内存泄漏
- 为什么以下C++代码中存在内存泄漏?
- Klocwork Inside的资源泄漏
- OpenCV 我应该使用智能指针来防止内存泄漏吗?
- 我是否生成线程并导致内存泄漏?
- 多线程程序中出现意外的内存泄漏
- 为什么此函数会导致内存泄漏?
- 在 C++ 库中使用cythonized python时内存泄漏
- 需要帮助查找内存泄漏
- C++功能泄漏内存,我是C++新手,不确定如何解决
- 瓦尔格林德的内存泄漏使用新的
- CPP 中的瓦尔格林德和记忆泄漏:"Conditional jump or move depends on uninitialised values"
- 无法找出我的代码中的内存泄漏