Dans l'exemple que vous donnez:
gchar *string = function2(function1("something"));
g_free (string);
Vous ne peut pas gratuitement la chaîne de function1()
. C'est une fuite de mémoire. Ainsi, alors que je sais qu'il est agréable de compresser les choses, vous devez ralentir:
gchar *temp, *string;
temp = function1("something");
string = function2(temp);
g_free(temp);
temp = NULL;
g_free(string);
Sinon, chaque fois que le code est exécuté, function1()
sera allouer plus de mémoire qui n'est jamais libéré, et si votre application fonctionne depuis longtemps , votre programme commencera lentement à manquer de mémoire disponible (à cause de toute la mémoire allouée qui n'est jamais free()
d).
Une autre alternative est d'écrire un wrapper autour function2()
:
gchar *function2_wrapper(gchar *c)
{
gchar *ret = function2(c);
free(c);
return ret;
}
gchar *string = function2_wrapper(function1("something"));
Mais à mon avis, c'est probablement plus d'efforts que cela vaut la peine, et ceux qui cherchent à votre code peut être perdu, pense qu'il ya une fuite de mémoire lorsque il n'y a pas, et réécrire et se faire frapper avec une erreur double free()
à l'exécution et n'ont aucune idée de ce qui se passe,
Nous pouvons voir dans la page principale et la page de question si une question a été répondue ou fermée, vous n'avez pas besoin de changer le titre de la question. –