2010-12-13 4 views
-5

내 코드의이 부분에 매달려 있습니다. 어떤 도움을 주시면 감사하겠습니다.내 기능에 문제가 있습니까?

float* ThreeValueMovingAverage(float* numbers, int count) { 
     average = new float[count]; 
     for(int i = 0; i < count; i++) 
     { 
       average[i] = (numbers[i-1] + numbers[i] + numbers[i+1])/3.0f;} 
} 
+1

무엇을하려하십니까? – codaddict

+1

질문/문제가 무엇입니까? –

+6

시작하려면 함수가 아무 것도 반환하지 않습니다. –

답변

2

1)의 경우 I = 0, 숫자 [I-1]하지 런타임 (음수 인덱스)에서 로직에 대한 유효한 값과 수도 (가능성이) 충돌. 마찬가지로 i = count-1이다.

2) average = new float[count];은 컴파일 오류를 표시합니다. 그것은 당신이 잊었 계수의 값 (의 0 또는 음, 당신의 할당이 실패 할 경우 어떻게) 등

+0

@ JP19 : 1)을 사용하지 못하게 할 수 있다면 more를 사용하십시오.'numbers'는 어떤 배열의 중간을 가리킬 수 있습니다. – Vlad

+0

@Vlad : 내 나쁜 ... 당신 말이 맞아. 그것은 "충돌"할 수 있고 논리적으로도 올바르지 않습니다. –

+2

@ JP19 : 1) OP 코드에서 실제로 'i-1'이 아니지만 'i-l'(아마도 일부 전역 변수가 'l'인 경우)입니다. – Vlad

0

을 확인하지 않는 float* average = new float[count];

3) 일반적으로는, 함수가 안전하지 않은해야 평균 유형을 지정하십시오 :

0

음, 첫 번째 및 마지막 반복에서 범위를 벗어난 오류가 발생했을 수 있습니다.

0

끝에 "return"문이 표시되지 않습니다. "i"가 0이면 숫자 [i-1]이 (가) 배열의 시작 부분에서 떨어져서 충돌을 일으 킵니다. "i"가 (count-1)이면 숫자 [i + 1]은 배열의 끝에서 벗어납니다.

0

1)

i 0, 당신은 numbers[i - 1]이 무엇을 기대합니까?

당신이 생각했던 것 중에 특히 numbers이 배열의 시작 부분을 가리키고 있다고 가정한다면 - 틀렸어. 이것이 우리가 "정의되지 않은 행동"이라고 부르는 것입니다. C++은 배열의 경계를 지나치는 것을 막을 수는 없습니다.

이것은 기본적으로 논리 오류입니다. n 데이터 포인트가있는 경우 n-2 개의 값만 이동 평균을 얻을 수 있습니다.

2)

average가 정의 ? 더 넓은 범위의 변수가 아니면 여기서 정의해야합니다. 나는. 형식을 지정하십시오 : float average = ....

3)

그것은 당신이 단지 게시물을 잘못 형식의 것이 될 수있다 (하지 않는) 어디를) 소스 코드를 복사 붙여 넣기,하지만 당신은 [i - l] (소문자 엘을 가지고있는 것 같습니다 [i - 1] (숫자 1)을 의미합니다.

관련 문제