2

Objective-C では、次のように C 配列を宣言します。

int 長さ = 10;
int a[長さ];

これにより、Xcode ではエラーが発生しませんが、Visual Studio などの他のコンパイラではエラーが発生します。仕組みを教えてください。それを使用するか、代わりに malloc/calloc を使用する必要がありますか?

4

1 に答える 1

6

可変長配列は 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

于 2011-10-31T07:34:20.277 に答える