我有内存分配的问题,运行时,下面的while循环我的电脑占用的RAM不断增加,我不明白我有什么分配和如何做到这一点内存分配C++
while(cvWaitKey(1)<0)
{
img = cvQueryFrame(capture);
height = img->height;
width = img->width;
step = img->widthStep;
channels = img->nChannels;
gray_arr = (uchar * *)malloc(sizeof(uchar *)*(height + 1));
for(int i=0; i<height; i++)
{
gray_arr[i] = (uchar *)malloc(sizeof(uchar)*(width + 1));
for(int j=0; j<width; j++)
{
gray_arr[i][j] = (0.11*data[i*step + j*channels] + 0.56*data[i*step + j*channels + 1] + 0.33*data[i*step + j*channels + 2]);
}
}
for(int j=0; j<width; j++)
{
sum=0;
for(int i=first_pixel; i<last_pixel+1; i++)
{
value= gray_arr[i][j];
sum = sum + value;
}
sum=sum/sample_number;
store[j]= sum;
}
for(int i=0; i<width; i++)
{
intensity_inv[i]=270- store[i];
}
graph = cvCreateImage(cvSize(1280,300),IPL_DEPTH_8U,1);
cvRectangle(graph, cvPoint(256,0), cvPoint(255,1), CV_RGB(255,255,255),1);
for (int i=0; i<width; i++)
{
cvLine(graph,cvPoint(i,270),cvPoint(i,intensity_inv[i]),CV_RGB(0,0,0));
}
cvNamedWindow("Sp",CV_WINDOW_AUTOSIZE);
cvMoveWindow("Sp",0,550);
cvNamedWindow("Original Image", CV_WINDOW_NORMAL);
cvMoveWindow("Original Image", 500, 0);
cvShowImage("Original Image", img);
cvShowImage("Sp",graph);
free(gray_arr);
}
对不起我的英文不好
感谢
关闭蝙蝠,我看到'height + 1'调用'malloc',但只有一个调用'free'。最终应该对每个'malloc'调用进行一次“免费”调用;如果没有,你正在泄漏记忆。 –
顺便说一句:这看起来像C,而不是C++。 – Matthias
为什么使用'malloc'(这是“旧”C)而不是'new'(这是C++)?并请更好地格式化您的代码(一致的缩进,空行等) – olevegard