首页 > 解决方案 > C++ 函数中的 Bad_alloc 异常

问题描述

嗨,我是 C++ 编程新手,我有一个返回函数short*

我的功能代码是

这个函数执行了数千次,因为这个 bad_alloc 在内存位置生成,所以任何人都可以告诉我如何解决这个问题。

getoneframe 函数调用的代码

short *myData = NULL;
sock.SetCameraIP(m_destination_IP, m_destination_port);

m_startCamFlag = sock.StartCamera();
if (!m_startCamFlag)
{
    std::cout << "Unable to Start the Camera" << std::endl;
}

std::thread acquiringThread(callReceiveFunction, sock);
acquiringThread.detach();

while (flag)
{
    myData = sock.GetOneFrame();
    ImageShow(myData);
    Sleep(15);
    if (GetAsyncKeyState(VK_ESCAPE))
    {
        flag = false;
    }
}

标签: c++functionexception

解决方案


您的函数在行中分配动态内存

short         *m_returnframeBuffer = new short[BYTE_PER_FRAME];

并将指向调用函数的指针返回为

return m_returnframeBuffer;

听起来调用函数没有释放内存,导致bad_alloc函数被调用数千次时抛出。

确保调用函数在使用完内存后释放内存。

short* buffer = SomeCameraObject.GetOneFrame();

// Use buffer

// Deallocate memory.
delete [] buffer;

while将调用函数中的循环更新为:

while (flag)
{
    myData = sock.GetOneFrame();
    ImageShow(myData);
    Sleep(15);
    if (GetAsyncKeyState(VK_ESCAPE))
    {
        flag = false;
    }

    // Add this line
    delete [] myData;
}

推荐阅读