内存分配 C++
Memory allocation c++
我在内存分配方面有问题,当运行以下 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
来分配整个数组。您还需要释放每个元素的分配。
相关文章:
- 将数组的地址分配给变量并删除
- vector.resize()中的分配错误
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- Win32编译器选项和内存分配
- 函数中堆分配的效果与缺少堆分配的情况
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 获取字符串的长度并将其分配给数组
- 将地址分配给本地指针后,公共对象的变量将消失
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- 有没有一种方法可以使用placement new将堆叠对象分配给分配的内存
- 我在二维向量中是否正确分配了内存
- 正在尝试重载二进制搜索树分配运算符
- GlobalAlloc而不是其他分配方法
- 自定义先决条件对移动分配运算符有效吗
- 我可以重新分配/覆盖std::字符串吗
- 在c++中使用动态分配的问题
- 当一个新对象被分配到它的地址时,对象是否必须被销毁
- 为什么我可以使用比分配的内存更多的内存
- 使用RAII在给定次数的迭代后重新分配资源