Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C+;中的函数中存在错误的alloc异常+; 短* < /p>_C++_Function_Exception - Fatal编程技术网

C++ C+;中的函数中存在错误的alloc异常+; 短* < /p>

C++ C+;中的函数中存在错误的alloc异常+; 短* < /p>,c++,function,exception,C++,Function,Exception,我的功能代码是 这个函数执行了数千次,因为在生成的内存位置有一个错误的分配,所以有人能告诉我如何解决这个问题吗 getoneframe函数调用的代码 short *myData = NULL; sock.SetCameraIP(m_destination_IP, m_destination_port); m_startCamFlag = sock.StartCamera(); if (!m_startCamFlag) { std::cout << "Unable to St

我的功能代码是

这个函数执行了数千次,因为在生成的内存位置有一个错误的分配,所以有人能告诉我如何解决这个问题吗

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*myData=NULL;
sock.SetCameraIP(m_目的地IP、m_目的地端口);
m_startCamFlag=sock.StartCamera();
如果(!m_startCamFlag)
{

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

short         *m_returnframeBuffer = new short[BYTE_PER_FRAME];
并将指向调用函数的指针返回为

return m_returnframeBuffer;
听起来调用函数没有释放内存,这会导致在调用函数数千次时抛出
bad\u 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!=每帧最大字节数)
{
m_myChar1=m_frameBuffer1[m_bufferIndex1++];
m_myChar2=m_frameBuffer1[m_bufferIndex1++];

value=(m_myChar1@Mickey,正是我所想的。添加
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;
    }