1
typedef char* string;
int func1(string s);
char* func2(); // returns a new memory/

if(func1(func2()) == 4)
{
// code
}

func2() は条件でのみ必要であると仮定します。新しく割り当てられたメモリを解放する必要があるため、同じ行内で (つまり、同じ条件または括弧で) 解放するにはどうすればよいですか? これに対する私の動機は、コードをきれいに保つことです。

EDIT 1.はい、acの質問です。「文字列」型の使用は、常に char* に型定義しているため、私の側ではエラーでした。混乱させて申し訳ありません。

4

3 に答える 3

8

これをきれいに行うには、明確な方法で作業を行う新しい関数を作成します。

static int func3()
{
   char *s = func2();
   int result = func1(s);
   free(s);
   return result;
}

…
if (func3() == 4)
    …

func2(おそらく、メモリが正常に割り当てられるという何らかの保証があります。そうでない場合は、その戻り値をテストする必要があります。)

于 2013-09-18T13:35:42.640 に答える
1

新しい関数定義なしで同じ行で解放します。

int result;
char *temp;
/* comma operator: evaluate these 4 expressions left-to-right,
   and the value is the value of the last expression */
if(temp = func2(), result = (func1(temp) == 4), free(temp), result)
{
    /* Do things */
}

クリーナー コード:

int func3(void)
{
    char *temp;
    int result;
    temp = func2();
    result = func1(temp);
    free(temp);
    return result;
}

/* ... */

if(func3() == 4)
{
    /* do things */
}
于 2013-09-18T13:48:55.783 に答える