2014-07-08 63 views
0

首先,我在使用XCode C++時遇到錯誤。我將一個指針變量聲明爲常量,並將該值設置爲一次。然後在代碼中循環運行3-5次,第一次是正確的,但依賴於變量的數量,座標值變爲接近0(即4.59163e-41)。我知道內存地址不會改變,只是它保存的值。此外,我正在處理大量的數據,我的意思是2000到20,000個座標。我敢肯定,無論是大問題還是小問題,我都會引起這個問題,所以我們將不勝感激。下面是一些用於改變[不那麼]常數可變的代碼:恆定變量正在改變,但不在內存中

我聲明它們在頭文件爲:

const float* m_xPointValues; 
const float* m_yPointValues; 

然後在cpp文件我將它們設置在下面的功能:

void ccGraphDisplay::setPointValues(float* xPointValues, float* yPointValues, unsigned numberOfPoints) 
{ 
    assert(xPointValues); 
    assert(yPointValues); 

    m_xPointValues = xPointValues; 
    m_yPointValues = yPointValues; 
    m_numberOfPoints = numberOfPoints; 

....} 
在循環功能我轉向他們,但據我所知,這並沒有改變它們的價值

然後:

for (unsigned i=0;i<m_numberOfPoints;++i) 
{ 
    shiftedXValue = (((m_xPointValues[i] - m_xAbsoluteMin)/(m_xAbsoluteMax-m_xAbsoluteMin))*(m_roi[2]-m_roi[0]))+m_roi[0]; 
    shiftedYValue = (((m_yPointValues[i] - m_yAbsoluteMin)/(m_yAbsoluteMax-m_yAbsoluteMin))*(m_roi[3]-m_roi[1]))+m_roi[1]; 
} 

對我來說這是一個非常奇怪的錯誤。我不會在其他任何地方更改m_xPointValues或m_yPointValues的值,並且在最大的數據集中只有座標的末端部分發生變化。我還設置了循環來打印循環開始和結束處的值,並且結束始終與開始時相同,但是當循環開始時它的值發生變化。

最後一些我已經嘗試調試想法包括: 1)從存儲浮到雙打 2)更改指針不再是恆定的在恆定值(雙鍵和浮子 3)的過去而變化的指針)

任何幫助將不勝感激(包括想法嘗試!)。 謝謝!

回答

1

這聽起來像的位置指向xPointValuesyPointValues,你傳遞給setPointValues,不具有相同的壽命作爲m_xPointValuesm_yPointValues

+0

謝謝!這是我宣佈他們的方式。我最初有他們:float xPointValues [numberOfPoints];但通過將它們更改爲:float * xPointValues = new float [numberOfPoints];在函數運行後它們不再被刪除。 – user3817808