-1
main()
{
while(1)
    {
    if(j==7)
        {
        unsigned short Alphabet[10]; //what is size of this variable 
/* if i came out of this loop will the memory allocated be cleared? if not then how to clear it? */
        }
    }
}

アルファベットのサイズは?

4

1 に答える 1

0

Alphabetunsigned short10 個の要素の配列です。そのサイズは10 * sizeof (unsigned short)で、sizeof (unsigned short)通常は 2 ですが、実装によって異なる場合があります。

標準で使用される用語でAlphabetは、自動保存期間があります。つまり、最も内側の包含ブロック (この場合、最も近い{andで区切られている}) への入り口で作成され、そのブロックから出ると存在しなくなります。(通常は「スタック」に割り当てられますが、言語標準では実際にはその用語を使用しておらず、コンパイラによっては別の戦略を使用する場合があります。)

「存在しなくなる」と言うとき、必ずしもスタックからクリアまたはポップされるという意味ではありません。これは、アクセスを試みることが許可されなくなったことを意味するだけです。(オブジェクトへのポインターを保存し、ブロックの外側で参照解除することで、これを試みることができます。その場合、コードの動作は未定義です。)

基本的にAlphabet、最も内側の囲みブロックが実行されている間だけ存在します。コンパイラは、好きな方法でそれを実装できます。関数が呼び出されたときに実際の割り当てが発生し、関数が返されたときにスタックがポップされるのは一般的ですがAlphabet、メモリが明示的に割り当て解除されていなくても、概念的にはブロックの最後に存在しなくなります。

于 2013-06-18T15:21:47.340 に答える