[解決済み] なぜ、サイズ 8 の初期化されていない値を使用するのでしょうか?
質問
私のコードでは
membrane
という名前の関数と
exciteMod()
という名前の関数は
decide()
という名前の変数と
delta_U
. の最初の行は
exciteMod()
は
this->delta_U = 0
. で
decide()
の指数を持っています。
-delta_U
(
exp(-this->delta_U)
というエラーが発生します。 サイズ8の初期化されていない値を使用しています。この原因は何でしょうか?についてのエラーはありません。
delta_U
というのがありますが、これはvalgrindで生成されるものです。
編集してください。 以下は、コードの該当部分です。
void membrane::exciteMod(){
this->delta_U = 0;
/* Do some stuff which does not directly affect this->delta_U*/
std::tr1::shared_ptr<bead> bit = this->beads.begin();
while (bit != this->nead.end()){
std::tr1::shared_ptr<bead> b = *bit++;
//calculate the doubles U and nextU on b, nothing here gives a warning in valgrind, anyhow U and nextU on b are always defined
this->delta_U += (b->nextU - b->U);
}
decide();
}
void membrane::decide(){
double r = P.r.ran3() // the random function from numerical recepies
double f = - this->delta_U;
if (r > exp(f)){ //this gives the warning even though delta_U is valid
/*stuff*/
}
}
これは警告です。
<ブロッククオート
==サイズ8の未初期化値の使用
==467== at 0x300B00D75D: __ieee754_exp (in /lib64/libm-2.5.so)
==0x300B022FA3: exp (/lib64/libm-2.5.so) による ==467= 。
==0x40BB9A: membrane::decide() (membrane.cpp:813) によるものです。
==467== by 0x40EBB1: membrane::exciteMod() (membrane.cpp:639)
0x413994 によって ==467==: membrane::MCstep(int) (membrane.cpp:486)
0x402767 による ==467==: メイン (main.cpp:14)
編集してください。
を呼んでいるところだけだと書いておけばよかった。
decide()
の中にあります。
exciteMod()
.
解決方法は?
初期化されない値の最も可能性の高い原因は、少なくとも1つの
b->nextU
または
b->U
に追加していること。
delta_U
はそれ自体が初期化されていない。ということです。
foo = 0;
foo += some_uninitialized_value;
if (foo) // Valgrind warns here
foo が初期化されなくなったとき、Valgrind が報告するようにしたい。残念ながら、そうすることは、実用的であるためにはあまりにも多くの "false positive" 警告を発生させます。
をループに挿入することができます。
VALGRIND_CHECK_MEM_IS_DEFINED
(参照
Valgrindユーザーマニュアル
が発生したときに、Valgrind はその瞬間を知らせます。
delta_U
が未定義になります。
関連
-
[解決済み] 非常に基本的なC++プログラムの問題 - バイナリ式への無効なオペランド
-
[解決済み】ファイルから整数を読み込んで配列に格納する C++ 【クローズド
-
[解決済み】標準ライブラリにstd::endlに相当するタブはあるか?
-
[解決済み] なぜ、オブジェクトそのものではなく、ポインタを使用しなければならないのですか?
-
[解決済み] マクロで無意味なdo-while文やif-else文を使っているのはなぜですか?
-
[解決済み] なぜ (int)x ではなく static_cast<int>(x) を使うのですか?
-
[解決済み] なぜこのプログラムは3つのC++コンパイラで誤って拒否されるのですか?
-
[解決済み】なぜC++プログラマは'new'の使用を最小限に抑えなければならないのでしょうか?
-
[解決済み】なぜemplace_backの代わりにpush_backを使うことがあるのでしょうか?
-
[解決済み】C++でネストされたクラスを使用するのはなぜですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Visual Studio 2015で「非標準の構文; '&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み】C++でランダムな2倍数を生成する
-
[解決済み] error: 'if' の前に unqualified-id を期待した。
-
[解決済み] 既に.objで定義されている-二重包含はない
-
[解決済み】C++の余分な資格エラー
-
[解決済み】浮動小数点数の乱数生成
-
[解決済み] to_string は std のメンバーではない、と g++ が言っている (mingw)
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み】演算子のオーバーロード C++; <<操作のパラメータが多すぎる
-
[解決済み】エラー。引数リストに一致するコンストラクタのインスタンスがない