このプログラムをもっと読みやすくするためのアイデアが必要です。デザイナーの方が他よりも問題だと思います。
私には2つのループがあります:
for( ... ) {
  //... 
   for(...) {
     if(baa) {
       goto outer;
      } 
      //statements of 2-loop
    }
     //statements of 1-loop
}
baaゼロ以外の値がある場合はouter正常に動作し、ループ1と2の統計を実行せずにラベルにジャンプします。ただし、前に、呼び出された場合は独立returnしていくつかの呼び出しを行う必要があります。free()goto outer
 if(a != NULL) free(a);
 if(b != NULL) free(b);
しかし、私がここにいるgotoのは、上記のコードが呼び出されていないためです。
そして、私は次のことをする必要があります:
   goto outer; //if normally exited from two-loops, go to outer anyway.
    outer: {
     if(a != NULL) free(a);
     if(b != NULL) free(b);
        return ret;
    }
関数を次のようにする理由:
char* foo(void) {
  char *ret = NULL;
  for( ... ) {
    //... 
    for(...) {
     if(baa) {
        ret = tmp_result;
        goto outer;
      } 
       //some statements of 2-loop
     }
       //some statements of 1-loop
    }
  goto outer;
  outer: {
     if(a != NULL) free(a);
     if(b != NULL) free(b);
         return ret;
  }
}
これが明確であることを願っています。前もって感謝します。