まず第一に、私は C++ プログラミングに関しては初心者です。昨日、私はかなり奇妙なことに遭遇しました。配列を指すポインターを介して配列の長さを決定しようとしていました。sizeofがうまくいかなかったので、Googleで少し検索したところ、このWebサイトにたどり着き、不可能であるという答えが見つかりました。代わりに、配列の最後のインデックスに範囲外の値を配置し、このインデックスに到達するまでカウンターをインクリメントする必要があります。最後のインデックスに含まれていた情報を上書きしたくなかったので、最後のインデックスの 1 つ後に範囲外の値を入れてみました。失敗すると思っていたのですが、なぜかそうではありませんでした。
私はどこかで間違いを犯し、配列が割り当てたよりも長いと思ったので、次のテストを行いました。
int a[4];
a[20] = 42;
std::cout << a[20];
出力はエラーなしで 42 です。なぜこれが機能するのですか?これはまったく有効ではないはずですよね?さらに興味深いのは、これが任意のプリミティブ型配列で機能するという事実です。ただし、std::string を使用すると、プログラムは即座に 1 で存在します。
何か案は?