2 つの配列を一緒に追加しようとしています。{0, 1, 2}
2 番目の配列に追加されたときの最初の配列は、{3, 4, 5}
を生成する必要があり{0, 1, 2, 3, 4, 5}
ます。先に進む前に、私が持っているものをお見せしましょう。
#include <iostream>
int main() {
int i = 0;
int arr1[] = {3, 4, 5}, arr2[] = {0, 1, 2};
while (i < 3) {
arr2[3 + i] = arr1[i];
i++;
}
std::cout << std::endl;
for (int i = 0; i < 6; i++) std::cout << arr2[i] << std::endl; // print
}
私がそれを実装した方法は正しいと思います。しかし、新しい配列 ( arr2
) の内容を出力すると、次のようになります。
0
1
2
-1219315227
-1218166796
134514640
0, 1, 2
は元の配列ですが、3, 4, 5
一部がこれらの奇妙な数値に変換されています。std::cout
ただし、これはwhile ループに任意のステートメントを追加することで何とか修正されます。
...
while (i < 3) {
std::cout << 5 << '\n'; // just a random #
arr2[3 + i] = arr1[i];
i++;
}
...
そして、配列をもう一度印刷すると、うまくいきます!:
5
0
1
2
3
4
5
私の質問は、while ループ内でステートメントを使用するstd::cout
と、そうしないのではなく、なぜこれが機能するのかということです。その場合、それらの数値が得られます。
編集:
したがって、ここにあるのは未定義の動作であることがわかりました。それで、私の質問はまだ立っています: なぜ私のコードstd::cout
は while ループ内の呼び出しで動作するのですか?