|
本帖最后由 zirong0804 于 2020-5-23 10:33 编辑
从以下程序可以看出:
1-用free释放一片内存之后,操作系统可能不会真正的收回,当你下一次用malloc分配内存的时候如果大小刚好,它会把你刚释放掉的内存分配给你。如何避免这问题?
程序目的:想对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);
}
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!
|