은 내가 MBED LPC1768에 대한 간단한 내적 기능을 썼다 호출 1 벡터 ({1,1,1 ... 1})를 생성하고 직렬로 인쇄합니다. 따라서 예상 결과는 128과 128이어야합니다. 변수 sum
은 128과 256을 갖기 때문에 지속되는 것으로 보입니다. 또한 float sum
선언을 float sum = 0
으로 변경하면 128과 128의 결과를 얻게됩니다. sum
은 정적이 아니므로 함수 호출간에 지속되는 이유는 무엇입니까? 감사합니다.기능
Q
기능
1
A
답변
0
초기화되지 않은 변수를 읽었을 때 UB가 있으며 정의되지 않은 동작의 특정 부작용에 관해 논의하는 것은 거의 쓸모가 없습니다.
3
"지속성"문제는 sum
이 초기화되지 않은 상태로 사용되므로 정의되지 않은 동작이 발생합니다. 그러나 귀하의 경우, sum
은 이전 호출 동안 있었던 메모리의 같은 위치에 할당되므로 "지속성"이라는 환상을 만듭니다.
컴파일러가 경고를 발행 했으므로 무시해서는 안됩니다.
수정을 사용하기 전에 변수에 초기화를 추가하여이 문제 : 당신은 초기화되지 않은 변수 사용
float sum = 0;
for (int i = 0; i < length; i++){
sum = sum + a[i]*b[i];
}
- 정의되지 않은 동작에> 결과를. –