2016-07-22 8 views
1

を呼び出します1ベクトル({1,1,1 ... 1})に変換してシリアルに出力します。したがって、期待される結果はちょうど128と128でなければなりません。変数sumは、128と256を得るために残るようです。さらに、float sum宣言をfloat sum = 0に変更すると、128と128の結果が得られます。 sumは静的ではないので、なぜそれが関数呼び出しの間に持続するのですか?ありがとう機能は、私がMBED LPC1768上で、簡単なドット積機能を書いた

+0

- 未定義の動作で>結果を。 –

答えて

0

あなたは初期化されていない変数から読んだUBを持っていて、未定義の動作の特定の副作用について議論するのはかなり役に立たない。

3

"持続性"の問題は、sumが初期化されていないため、未定義の動作が発生することです。しかし、あなたのケースでは、sumは、以前の呼び出しであった場所のメモリ内の同じ場所に割り当てられ、「永続性」の錯覚を作り出します。

コンパイラがおそらくあなたに警告を出したことに注意してください。無視しないでください。

修正それらを使用する前に、変数に初期化を追加することでこの問題:あなたは初期化されていない変数使用

float sum = 0; 
for (int i = 0; i < length; i++){ 
    sum = sum + a[i]*b[i]; 
} 
関連する問題