質問: 下記のコードは汎用変数*tattrに値を設定していると思いますが、 Aの設定方法とBの設定方法は機能的に同じと思いますが 敢えて、Aのコードを使用する意味(価値)はありますか? ..#include pthread_attr_t *tattr; //blobal int main(){ /* do{ //<---A if( (tattr=(pthread_attr_t *)malloc(sizeof(pthread_attr_t)) )==NULL){ printf("Couldn't allocate memory for attribute object\n"); } } while(tattr==NULL); */ tattr=(pthread_attr_t *)malloc(sizeof(pthread_attr_t)); //<---B ..... } 以上宜しくお願いします。
回答: > > Aの設定方法とBの設定方法は機能的に同じと思いますが > > > そもそも機能的には同じではないです。 Aの処理は、メモリが確保できるまでループして待ちますが、Bの処理は確保できてもできなくても先に進みます。 仕様的にどうしたいのかでどちらを選択するか変わると思います。 ちなみにAの処理の場合、最悪無限ループしかねないので、タイムアウトや試行回数などの処理が欲しいところです。 Bの処理はmalloc以降が端折られていますが、確保できなかった場合のエラー処理が必要ですね。