私はユーザーからの入力として整数をとり、その可変サイズの配列を割り当てる簡単なコードを書いた。可変長配列の静的メモリ割り当てをGCCで許可するのはなぜですか?
#include <stdio.h>
int main(){
int n, i;
scanf("%d", &n);
int arr[n];
for(i=0; i<n; i++){
arr[i] = i;
}
for(i=0; i<n; i++){
printf("%d\t", arr[i]);
}
return 0;
}
上記のコードは完全に機能します(配列のサイズがそれほど大きくない場合は、約2,150,000サイズのsegフォールトを与えます)。どのように許可されていますか?私は、配列サイズが可変であるため、これを動的メモリ割り当てを使用して行うべきだと考えました。
メモリ割り当ての概念全体が揺さぶられました。どのような条件で許可されているかを説明してください(合法的なコードでなければなりません)。
Cは、18年近くにわたり、可変長配列*という概念を持っています。ストレージはまだ自動ですが、ランタイムサイズです。自動保管に関する通常の制限がすべて適用されます。 –
コンパイル中も警告は表示されません。 "gcc -Wall test.c -o test"とコンパイルされました –
あなたの質問は理にかなっていません。あなたのコードのどの部分が「静的」なのですか? –