1
Java/C++開発者はこちら。 Cを学ぼうとしていますが、私は配列のメモリ割り当てと混同しています。C - 配列は範囲外で使用できますか?
ここで何が起こっているか
#include <stdlib.h>
#include <stdio.h>
#include <windows.h>
int main()
{
int az[3];
az[2] = 66;
az[8] = 5214;
printf("%d\n", az[8]);
system("pause");
return 0;
}
出力
5214
どのようにそれをすることができますか?なぜ私はの外に出る例外またはプログラムがクラッシュするのですか?私はこれを無限に行うことができますか?この場合、配列の長さはどれくらいですか?私の配列ですでに値を範囲外に置くことができる場合は、malloc
経由でメモリを割り当てるのは何ですか?これは私には意味をなさない。
Cは範囲外については不平を言っていません。そのような単純な。 – icbytes
振る舞いは「未定義」であり、まさにそれを意味します。クラッシュする可能性があります。ゴミを印刷できました。 sigsegvできました。 minecraftのコピーを起動することができます。 C/C++にはガードレールはありません。 – evaitl
あなたはC++でも同じことができます。 Cまたはmallocに固有のものではありません。 – qexyn