2D阵列打印错误

时间:2016-06-14 11:09:49

标签: c arrays pointers

这是我的代码段:

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;

}

1 个答案:

答案 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;
}