e276.c

回らないwhileループ


修正前 while(1) { ret = func1() ; if( ret != OK ) { break ; } ret = func2() ; if( ret != OK ) { break ; } ~ ~ ret = func10() ; if( ret != OK ) { break ; } break ; } if( ret != OK ) { エラー処理 ; return NG ; } 正常処理 ; return OK ;
修正案1 (資源を獲得していない時) ret = func1() ; if( ret != OK ) { return ret ; } ret = func2() ; if( ret != OK ) { return ret ; } ~ ~ ret = func10() ; if( ret != OK ) { return ret ; } return OK ; /* 最後に正常処理の出口1つ */
修正案2 (資源を獲得している時) p1 = malloc( 100 ) ; if( p1 == NULL ) { goto err ; } p2 = malloc( 200 ) ; if( p2 == NULL ) { goto err ; } p3 = malloc( 300 ) ; if( p3 == NULL ) { goto err ; } ~ ~ p10 = malloc( 1000 ) ; if( p1 == NULL ) { goto err ; } 正常処理 ; return OK ; err : /* 資源解放処理 */ if( p1 ) free( p1 ) ; if( p2 ) free( p2 ) ; if( p3 ) free( p3 ) ; ~ ~ if( p10 ) free( p10 ) ; return NG ;