[解決済み】なぜ、サイズ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)
==0x467== by 0x413994: membrane::MCstep(int) (membrane.cpp:486)
0x402767 によって ==467==: main (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
が未定義になります。
関連
-
[解決済み】構造体のベクター初期化について
-
[解決済み】文字列関数で'char const*'のインスタンスを投げた後に呼び出されるterminate [閉店].
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み] なぜ、オブジェクトそのものではなく、ポインタを使用しなければならないのですか?
-
[解決済み] マクロで無意味な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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++でユーザー入力を待つ【重複あり
-
[解決済み] [Solved] Error C1083: Cannot open include file: 'stdafx.h'
-
[解決済み】関数名の前に期待されるイニシャライザー
-
[解決済み] クラスにデフォルトコンストラクタが存在しない。
-
[解決済み】テンプレートの引数1が無効です(Code::Blocks Win Vista) - テンプレートは使いません。
-
[解決済み】c++でstd::vectorを返すための効率的な方法
-
[解決済み】Visual Studio 2013および2015でC++コンパイラーエラーC2280「削除された関数を参照しようとした」が発生する
-
[解決済み】エラー:free(): 次のサイズが無効です(fast)。
-
[解決済み】C++ - 適切なデフォルトコンストラクタがない [重複]。
-
[解決済み】デバッグアサーションに失敗しました