C VirtualDub筛选器帧缓冲区-释放内存

C VirtualDub筛选器帧缓冲区-释放内存,c,pointers,malloc,virtualdub,C,Pointers,Malloc,Virtualdub,我正在编写一个VirtualDub过滤器,它需要一个单独的帧缓冲区,用于fa->src.data和fa->dst.data之间的中间图像处理(.data本质上是一个指向像素数据的指针) 我使用以下方法创建指向上述内容的char指针: /* Pointers to source and destination frame stores */ char *src = (char *)fa->src.data; char *dst = (char *)fa->dst.data; /* I

我正在编写一个VirtualDub过滤器,它需要一个单独的帧缓冲区,用于fa->src.data和fa->dst.data之间的中间图像处理(.data本质上是一个指向像素数据的指针)

我使用以下方法创建指向上述内容的char指针:

/* Pointers to source and destination frame stores */
char *src = (char *)fa->src.data;
char *dst = (char *)fa->dst.data;

/* Image width and height */
int w = fa->src.w*sizeof(Pixel32);
int h = fa->src.h*sizeof(Pixel32);
这样,我就可以逐行将数据从源帧复制到目标帧:

memcpy(dst,src,w);
现在我想要一个中间缓冲区,我可以从*dst复制到buffer,然后从buffer复制到*src。我该怎么做

我尝试了几件事,取得了不同程度的成功

/* Define and initialise char array with malloc */
char *buf = (char*)malloc(w*h); 
然后:

memcpy(buf,src,w); /* copy to buffer */
memcpy(dst,buf,w); /* copy from buffer to dst */
大多数情况下,这似乎是可行的。然而,过了一会儿,我得到了“模块中发生了越界内存访问(访问冲突)”。问题是我似乎耗尽了系统内存(VirtualDub在一段时间后占用了所有可用内存)

我需要释放缓冲区吗?看起来很奇怪,因为它是每帧初始化的。我怎样才能释放它

我尝试了free(dstbuf)和free(&dstbuf),但在运行时遇到“调试断言失败”错误,表达式:_CrtIsValidHeapPointer(pUserData)。。。没有太多其他的


有什么想法吗

通过每次运行只分配一次内存来解决。没有理由为每个帧分配内存,因为我一次只需要保存一帧。

释放与分配相同的buf