2012-10-06 21 views
2

所以,我正在用C語言編寫一些代碼來處理ECG設備的大型程序數據。該程序有幾個全局int數組來存儲數據,因爲它必須連續過濾數據,同時也使用先前的原始數據和過濾數據。因此,爲了丟棄不再用於過濾和用新的原始數據替換數據等的數據,我必須稍微移動數組中的整數。實現這個並不難,比在我的代碼中執行一些for循環來做到這一點更爲困難。然而,我想定義一個爲我做這個的函數,因爲我這樣做了好幾次。所以我編寫這樣的功能,即是這樣的:數組函數導致另一個數組的值發生變化

void updateArray(int array[], int size){ 
size = size/sizeof(int); 
int i; 
for(i = size; i > 0; i--){ 
    array[i] = array[i-1]; 
}} 

但是,因爲我不是那種習慣在C代碼,我已經清楚地做錯了這裏,因爲使用該功能產生錯誤的數據。調試函數後,我發現當調用這個函數時,數組按照預期移動,但是我的其他數組中的其中一個數組的值已更改。我不確定這是爲什麼,但我真的希望有一些反饋可以幫助我更好地理解問題。

回答

3

array[size]超出了數組的末尾。你正在複製一個太多的值。

它應該是:

void updateArray(int array[], int size) { 
    size = size/sizeof(int); 
    int i; 
    for(i = size - 1; i > 0; i--) { 
     array[i] = array[i-1]; 
    } 
} 
+0

還有就是在傳遞的大小值是否正確的問題...代碼期望它以字節數組的大小,但也許事實並非如此。 (儘管更仔細地閱讀OP的症狀,但這可能不是問題。) –

相關問題