簡體   English   中英

Bad_alloc C ++中的函數異常

[英]Bad_alloc Exception in function in C++

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

您的函數在行中分配動態內存

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;
}
    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循環永遠不會中斷。 在第二次遞增之前添加另一個檢查

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM