1

C++ には、次の 2 つの関数があります。

do_work(args, std::valarray<double> arr=std::valarray<double>(0.0, 1)) {
  very_complicated_things
}

wrapper(args, std::valarray<double> arr=std::valarray<double>(0.0, 1)) {
  do_work(args, arr);
}

do_work(args) を呼び出して wrapper(args) を呼び出すと、異なる結果が得られます。前者は問題なく動作します。後者は do_work 関数のどこかでクラッシュしますが、その理由はわかりません (コードは非常に複雑です)。これはなぜですか?ラッパー内の関数呼び出しで「arr」引数を省略した場合:

wrapper(args, std::valarray<double> arr=std::valarray<double>(0.0, 1)) {
  do_work(args);
}

その後、wrapper(args) は正常に動作します! 何が起こっているのか誰にも分かりますか?どこから探し始めたらいいのかわからない。

4

0 に答える 0