3

このようにメモリを割り当てるのは悪い習慣ですか?:

FOO *foo;
while (!(foo = malloc(sizeof(FOO)))) ;
4

2 に答える 2

4

悪い習慣については知りませんが、それは珍しいことです。 malloc()通常、障害は、プログラムが回復する可能性が低い重大なシステムの問題を示しています。システムが異なる場合、あなたの例は非常に実用的かもしれません。

sizeof(FOO)注意 - この回答は、それが「合理的」であり、malloc()あまりにも多くのメモリを要求しているために拒否するだけではないことを前提としています。

于 2013-01-17T17:05:10.300 に答える
1

からの結果を「保証」するものではありませんmalloc()。malloc が返された場合NULL、おそらく理由があります (メモリ不足など)。そして、無限ループに陥る可能性があります。

さらに、これを Linux プラットフォームで実行している場合:

デフォルトでは、Linux は楽観的なメモリ割り当て戦略に従います。これは、malloc() が非 NULL を返す場合、メモリが実際に使用可能であるという保証がないことを意味します。

つまり、malloc を何度も呼び出すと、たまたま非 NULL が返されたということです。これは、Linux の「楽観的」戦略のためです。

このコードは、デバッグの悪夢に備えていると思います。

于 2013-01-17T17:09:47.500 に答える