我有內存分配的問題,運行時,下面的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