以下は、スレッド ビルディング ブロック (オープン ソース 4.1) をサポートする Visual Studio 10 で実行されている単純な VC++ プログラムのスニペットです。
サンプルからプログラムをコンパイルして実行したところ、cout からの new 演算子の出力を見て驚きました。
int main() {
string str[N] = { string("a"), string("b") };
for (size_t i = 2; i < N; ++i) str[i] = str[i-1]+str[i-2];
string &to_scan = str[N-1];
size_t num_elem = to_scan.size();
size_t *max = new size_t[num_elem];
size_t *pos = new size_t[num_elem];
cout <<"*max : " << *max<< ", "<<"*pos :"<<*pos<<endl;
......
......
cout の出力は次のようになります。
*最大: 3452816845, *位置: 3452816845
驚いたことに、どちらの場合も max と pos の値が同じです。
これはおそらく、ライブラリ内の new 演算子のオーバーロードが原因でしょうか?
また
これは報告すべきバグですか?
また
これはただの偶然ですか?