2012-10-06 4 views
2

그래서 ECG 장치 용 데이터를 처리하는 더 큰 프로그램을 위해 C에 몇 가지 코드를 작성합니다. 이 프로그램에는 데이터를 지속적으로 필터링해야하고 이전의 원시 데이터와 필터링 된 데이터를 모두 사용하므로 데이터를 저장하는 여러 전역 int 배열이 있습니다. 따라서 필자는 더 이상 필터를 사용하지 않고 새로운 원시 데이터로 대체 할 데이터를 삭제하기 위해 배열에서 int를 한 번씩 이동해야합니다. 이것을 구현하는 것은 여기저기서 for 루프를 구현하는 것보다 어렵지 않습니다. 그러나 나는이 작업을 몇 번이나 해내면서이 작업을 저에게 해주는 함수를 정의하고 싶습니다. 내가 그 잘못된 데이터를이 기능을 관해서도 사용하는 것과, 내가 분명히, 여기에 뭔가 잘못 한 C 코드를 사용하지 않아요로,배열 함수를 사용하면 다른 배열의 값이 변경됩니다.

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

그러나 그러므로 나는이처럼 보였다 이러한 기능을 코딩. 함수를 디버깅 할 때이 함수를 호출하면 배열이 예상대로 이동했지만 다른 배열 중 하나에는 해당 값 중 하나가 변경된 것을 발견했습니다. 왜 그런지 모르겠지만 의견을 좀 더 잘 이해할 수 있기를 바랍니다.

답변

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의 증상을 더주의 깊게 읽는 것은 문제가 아닐 수도 있습니다.) –

관련 문제