C ++函数中的Bad_alloc异常

时间:2018-07-19 05:23:32

标签: c++ function exception

嗨,我是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;
    }
}

2 个答案:

答案 0 :(得分:2)

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

protected override void EndExecute(IAsyncResult asyncResult)

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

short         *m_returnframeBuffer = new short[BYTE_PER_FRAME];

听起来好像调用函数没有释放内存,这导致数千次调用该函数时抛出return m_returnframeBuffer;

确保使用完函数后,调用函数会重新分配内存。

bad_alloc

将调用函数中的short* buffer = SomeCameraObject.GetOneFrame(); // Use buffer // Deallocate memory. delete [] buffer; 循环更新为:

while

答案 1 :(得分:1)

    while (m_bufferIndex1 != MAX_BYTE_PER_FRAME)
    {
        m_myChar1 = m_frameBuffer1[m_bufferIndex1++];
        m_myChar2 = m_frameBuffer1[m_bufferIndex1++];
        value = (m_myChar1 << 8) | m_myChar2;
        m_returnframeBuffer[m_bufferIndex2++] = value;
    }

m_bufferIndex1被递增两次。因此,如果m_bufferIndex1为MAX_BYTE_PER_FRAME-1,它将进入循环并递增两次,而while循环永不中断。在第二次增加之前在此添加另一张支票