Objective-C では、次のように C 配列を宣言します。
int 長さ = 10;
int a[長さ];
これにより、Xcode ではエラーが発生しませんが、Visual Studio などの他のコンパイラではエラーが発生します。仕組みを教えてください。それを使用するか、代わりに malloc/calloc を使用する必要がありますか?
Objective-C では、次のように C 配列を宣言します。
int 長さ = 10;
int a[長さ];
これにより、Xcode ではエラーが発生しませんが、Visual Studio などの他のコンパイラではエラーが発生します。仕組みを教えてください。それを使用するか、代わりに malloc/calloc を使用する必要がありますか?
可変長配列は C99 で導入されました。私の知る限り、Microsoft の現在のコンパイラ (VC2010) は C99 (または少なくともその VLA 部分) をサポートしていません。
を使用して同じ種類のことを行うことができます。完了したらmalloc
覚えておくfree
必要があります。
何かのようなもの:
int length = 10;
int *a = malloc (length * sizeof(int));
if (a == NULL) {
doSomethingIntelligentSinceNoMemoryLeft();
} else {
useToHeartsContent (a[0], "thru", a[9]);
free (a);
}
おそらくalloca
、変数メモリ ブロックのスタックにスペースを割り当てるという点で、VLA に似ている which を使用することもできます。
しかし、注意が必要です。関数の終了時alloca
に自動的に割り当て解除が行われますが、通常、スタックはヒープよりも小さいリソースであり、malloc
ヒープを使い果たすと NULL が返されます。スタックを吹き飛ばすと、おそらくクラッシュとして現れます。
alloca(n)
の値が十分に小さい場合は、おそらく許容されますn
。