【发布时间】:2018-05-07 08:30:58
【问题描述】:
我正在尝试编写以下代码来计算移动平均线。 在“main.c”文件中,我调用了“movingAVG.h”的 2 个函数: 函数 initAVG() 创建一个数组并将所有元素初始化为 0,使用此函数我选择用于平均的 saples 数量。 函数 getAVG() 获取数组,用最新的样本替换最旧的样本并返回计算的平均值。 我需要使用指针数组对偶属性将数组从 initAVG 传递给 getAVG,但我不能这样做,我是 C 新手。我做错了什么? 任何帮助将非常感激。非常感谢!
/* ========================================
*
MEDIA MOBILE.
*
* ========================================
*/
#include "project.h"
uint8 start=0;
uint8 iy; //sample's vector index
uint32 sum=0;
uint32 avg;
uint32 *ptrSamples;
void initAVG(nSample)
{
uint8 i=0;
uint32 Samples[nSample];
ptrSamples = Samples;
while (i<=nSample)
{
Samples[nSample]=0;
i++;
}
start=1;
}
uint32 getAVG(uint8 nSample,uint32 lastvalue)
{
if (iy<=nSample && start==1)
{
sum -= ptrSamples[iy];
ptrSamples[iy] = lastvalue;
sum += ptrSamples[iy];
avg = sum / (nSample + 1);
if (iy<nSample)
{
iy++;
}else {iy = 0;}
}
return avg;
}
/* [] END OF FILE */
编辑: 我尝试对数组使用带有 malloc() 的动态内存分配,但它不起作用。怎么了? 使用 malloc() 分配的内存在退出 initAVG() 函数后是否仍然存在?
#include "project.h"
#include "malloc.h"
uint8 start=0;
uint8 iy; //sample's vector index
uint32 sum=0;
uint32 avg;
uint8 nSample;
uint32* ptrSamples;
void initAVG(numberOfSample)
{
uint8 i=0;
nSample=numberOfSample;
ptrSamples = malloc((nSample+1)*sizeof(uint32));
while (i<=nSample)
{
ptrSamples[i]=0;
i++;
}
start=1;
}
uint32 getAVG(uint32 lastvalue)
{
if (iy<=nSample && start==1)
{
sum -= ptrSamples[iy];
ptrSamples[iy] = lastvalue;
sum += ptrSamples[iy];
avg = sum / (nSample + 1);
if (iy<nSample)
{
iy++;
}else {iy = 0;}
}
return avg;
}
【问题讨论】:
-
看起来您所要做的就是让 Samples 全球化。
-
在 initAVG 中,您将 ptrSamples 设置为指向局部变量的指针,然后在 getAVG 中使用该指针。那是违法的。试试 mnistic 的建议。
标签: c arrays memory-management malloc heap-memory