2016-06-14 148 views
1

这是我的代码片段:二维数组打印错误

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]); 
} 

我的问题:print语句不给予适当的输出;垃圾值被打印。

我试着通过在第5行放置一个断点并尝试打印 “适配线[0] [0]”,“适配线[0] [1]”等等进行调试。 这给出正确的输出。但是在印刷声明中,事情开始崩溃。这里发生了什么? 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

请发布[mcve]。并描述一下“正确的输出”应该是什么。 – kaylum

+1

显示'plotLines'功能。 –

+0

你还没有为你的指针变量'fitsLine'分配任何内存! – user1336087

回答

1

这将有助于看到plotLines功能,但我猜测是,你是返回一个局部变量:

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; 
} 
+0

很好的答案。正如你猜测的那样。 – kaylum

+0

@kaylum我看到OP最后发布的代码。猜猜我的水晶球今天工作。 –

+0

工作。谢谢! –