内存分配 C++

Memory allocation c++

本文关键字:C++ 分配 内存      更新时间:2023-10-16

我在内存分配方面有问题,当运行以下 while 循环时,我计算机占用的 RAM 继续增加,我不明白我必须分配什么以及如何分配

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); 
}

对不起,我的英语不好

谢谢

您正在为 gray_arr 数组调用 malloc:

gray_arr = (uchar * * )malloc(sizeof(uchar * )*(height + 1));

以及该数组中的元素:

gray_arr[i] = (uchar * )malloc(sizeof(uchar)*(width + 1));

但是,您只是调用 free 来分配整个数组。您还需要释放每个元素的分配。