前提・実現したいこと
かなり変な設計ではありますが以下のようなコードでstack overflowの警告が出ます.
switchのネスト下で複数のMersenneTwister(std::mt19937_64)を使用することでおきます.
これはネストが問題でしょか
MTの複数宣言が問題でしょうか
以下のような同一アルゴリズムならstd::random_device seed_gen;
の位置を変更することで解決すると思いますがdistributionの範囲を変えたりとしてこの形を変更できない場合どのような解決策があるのでしょうか
発生している問題・エラーメッセージ
C6262
関数はスタックの '30228' バイトを使用します: /analyze:stacksize '16384' を超えています。
データの一部をヒープに移動することを考慮してください。
実際のソースコード
C
1#include <iostream> 2#include <random> 3 4int hoge(int, int, int, int); 5 6int main() 7{ 8 hoge(2, 5, 5, 5); 9 10 return 0; 11} 12 13int hoge(int s, int x, int y, int z) 14{ 15 int a = 0; 16 17 switch (s) 18 { 19 case 1: 20 { 21 switch (s) 22 { 23 case 1: 24 { 25 std::random_device seed_gen; 26 std::mt19937_64 engine(seed_gen()); 27 std::uniform_int_distribution<> dist(0, 1); 28 29 for (int i = 0; i < z; i++) 30 { 31 for (int j = 0; j < y; j++) 32 { 33 for (int k = 0; k < x; k++) 34 { 35 a = dist(engine); 36 } 37 } 38 } 39 } 40 break; 41 42 case 2: 43 { 44 std::random_device seed_gen; 45 std::mt19937_64 engine(seed_gen()); 46 std::uniform_int_distribution<> dist(0, 1); 47 48 for (int i = 0; i < z; i++) 49 { 50 for (int j = 0; j < y; j++) 51 { 52 for (int k = 0; k < x; k++) 53 { 54 int a = dist(engine); 55 } 56 } 57 } 58 } 59 break; 60 61 case 3: 62 { 63 std::random_device seed_gen; 64 std::mt19937_64 engine(seed_gen()); 65 std::uniform_int_distribution<> dist(0, 1); 66 67 for (int i = 0; i < z; i++) 68 { 69 for (int j = 0; j < y; j++) 70 { 71 for (int k = 0; k < x; k++) 72 { 73 int a = dist(engine); 74 } 75 } 76 } 77 } 78 break; 79 80 default: 81 break; 82 } 83 } 84 break; 85 86 case 2: 87 { 88 switch (s) 89 { 90 case 1: 91 { 92 std::random_device seed_gen; 93 std::mt19937_64 engine(seed_gen()); 94 std::uniform_int_distribution<> dist(0, 1); 95 96 for (int i = 0; i < z; i++) 97 { 98 for (int j = 0; j < y; j++) 99 { 100 for (int k = 0; k < x; k++) 101 { 102 a = dist(engine); 103 } 104 } 105 } 106 } 107 break; 108 109 case 2: 110 { 111 std::random_device seed_gen; 112 std::mt19937_64 engine(seed_gen()); 113 std::uniform_int_distribution<> dist(0, 1); 114 115 for (int i = 0; i < z; i++) 116 { 117 for (int j = 0; j < y; j++) 118 { 119 for (int k = 0; k < x; k++) 120 { 121 int a = dist(engine); 122 } 123 } 124 } 125 } 126 break; 127 128 case 3: 129 { 130 std::random_device seed_gen; 131 std::mt19937_64 engine(seed_gen()); 132 std::uniform_int_distribution<> dist(0, 1); 133 134 for (int i = 0; i < z; i++) 135 { 136 for (int j = 0; j < y; j++) 137 { 138 for (int k = 0; k < x; k++) 139 { 140 int a = dist(engine); 141 } 142 } 143 } 144 } 145 break; 146 147 default: 148 break; 149 } 150 } 151 152 break; 153 154 default: 155 break; 156 157 } 158 159 160 return 0; 161} 162
補足情報
Windows10 Pro
VisualStudio2019 Community
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/27 03:03