嗨,我是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;
}
}
答案 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循环永不中断。在第二次增加之前在此添加另一张支票