기능

2016-07-22 3 views
1

은 내가 MBED LPC1768에 대한 간단한 내적 기능을 썼다 호출 1 벡터 ({1,1,1 ... 1})를 생성하고 직렬로 인쇄합니다. 따라서 예상 결과는 128과 128이어야합니다. 변수 sum은 128과 256을 갖기 때문에 지속되는 것으로 보입니다. 또한 float sum 선언을 float sum = 0으로 변경하면 128과 128의 결과를 얻게됩니다. sum은 정적이 아니므로 함수 호출간에 지속되는 이유는 무엇입니까? 감사합니다.기능

+0

- 정의되지 않은 동작에> 결과를. –

답변

0

초기화되지 않은 변수를 읽었을 때 UB가 있으며 정의되지 않은 동작의 특정 부작용에 관해 논의하는 것은 거의 쓸모가 없습니다.

3

"지속성"문제는 sum이 초기화되지 않은 상태로 사용되므로 정의되지 않은 동작이 발생합니다. 그러나 귀하의 경우, sum은 이전 호출 동안 있었던 메모리의 같은 위치에 할당되므로 "지속성"이라는 환상을 만듭니다.

컴파일러가 경고를 발행 했으므로 무시해서는 안됩니다.

수정을 사용하기 전에 변수에 초기화를 추가하여이 문제 : 당신은 초기화되지 않은 변수 사용

float sum = 0; 
for (int i = 0; i < length; i++){ 
    sum = sum + a[i]*b[i]; 
}