初级会员

- 积分
- 155
- 金钱
- 155
- 注册时间
- 2014-8-16
- 在线时间
- 34 小时
|
50金钱
本帖最后由 ghostfly 于 2020-5-23 10:35 编辑
从以下程序可以看出:
1-用free释放一片内存之后,操作系统可能不会真正的收回,当你下一次用malloc分配内存的时候如果大小刚好,它会把你刚释放掉的内存分配给你。如何避免这问题?
Filter函数内as,bs,az,bz在程序第二次循环以后,它们的内存地址却是占用REFilter函数内变量REas,REbs,REaz,REbz的内存地址
程序目的:想对inputhead和inputrod这两个数据分别使用Filter和REfilter函数滤波,两者互不干扰
问题根源(在找解决方式):
这个两个指针的地址每次都一样,导致值互相使用,*Memory_Buffer 和 *REMemory_Buffer。
IIR滤波算法需要依赖上次的中间结果,这两个指针分别用于保存对inputhead和inputrod数据滤波的中间结果,而现在他们地址一样,导致指针指向的内容互相利用,没有独立开来
Filter函数中定义指针
float *Memory_Buffer = (float *)malloc(sizeof(float) * (Norder+1));
REfilter函数中定义指针
float *REMemory_Buffer = (float *)malloc(sizeof(float) * (RE_N+1));
因为需要保存上次执行中间结果,所以不能使用memset函数对这两个指针清零
2-程序简化如下:
#define N 2
#define Cutoff (float)2
...
while(1)
{
...
inputhead = ... //inputhead值 在while循环内每次更新,每次不一样
inputrod = ... //inputrod值 在while循环内每次更新,每次不一样
...
Filter(N, Cutoff, inputhead);
REfilter(N, Cutoff, inputrod);
}
|
-
free失效
-
REfliter函数
-
Filter函数
|