这是我的代码段:
float *fittedLine[NO_OF_INTERVALS];
int i;
for(k=0;k<NO_OF_INTERVALS;k++){
fittedLine[k] = plotLines(tStart, tEnd, yStart, yEnd);
for(i=0;i<14;i++)
printf("%f\n", fittedLine[k][i]);
}
我的问题:打印声明没有给出正确的输出;打印垃圾值。
我尝试通过在第5行放置断点并尝试打印来进行调试 fitsLine [0] [0],fittingLine [0] [1]等。 提供正确的输出。但是当谈到印刷声明时,事情开始分崩离析。这里发生了什么? plotLines返回一维数组。
plotLines函数:
float * plotLines(float t0, float tf, float y0, float yf){
float m = (yf - y0)/(tf - t0);
float t = t0;
int i = 0;
float y[200];
while(t<tf){
y[i] = m*t + yf - m*tf; ///y - y1 = m(x - x1)
i++;
t = t+SAMPLINGTIME;
}
return y;
}
答案 0 :(得分:1)
查看plotLines
函数会很有帮助,但我的 guess 是您要返回的局部变量:
float *plotLines() {
float temp[14];
// blah...
return temp;
}
这很糟糕。当函数结束时,temp
超出范围。您需要使用malloc
分配数组并返回该指针:
float *plotLines() {
float *temp = malloc(sizeof(float) * 14);
// Make sure temp is not NULL
// blah...
return temp;
}
以后不要忘记free
所有记忆。如果您仅暂时使用结果,则static
数组可以正常工作:
float *plotLines() {
static float temp[14];
// blah...
return temp;
}