2016-06-14 334 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

工作。謝謝! –