donc je suis en train d'optimiser le managment de ma mémoire dans mon code.malloc et free dans les fonctions (mémoire) Optimisation
Voici un échantillon du code:
Image image;
int main(int argc, char *argv[])
{
image = (Image) malloc(sizeof (struct image));
image = doSomething(image);
}
Image doSomething(Image imageInput) {
Image imageResult;
imageResult = (Image) malloc(sizeof (struct image));
//Code does something here
return imageResult;
}
Quand est-il approprié d'utiliser le libre(); dans mon exemple?
Image image;
int main(int argc, char *argv[])
{
image = (Image) malloc(sizeof (struct image));
image = doSomething(image);
free(image);
}
Image doSomething(Image imageInput) {
Image imageResult;
imageResult = (Image) malloc(sizeof (struct image));
//Code does something here
free(imageInput);
return imageResult;
}
La seule fois que je peux voir est la variable « imageInput » qui est censé arriver à copier dans la fonction et est supposé être effacé après que la fonction se termine.
Est-il exagéré de libérer une variable de fonction?
Et à la fin de l'exécution de l'application aussi.
Vous * ne peut pas * 'free' une variable de fonction: vous ne pouvez' mémoire free' qui a été attribué à la famille 'malloc' des fonctions. La vie des variables de fonction se termine lorsque vous quittez la fonction de toute façon. –
[Veuillez vous reporter à cette discussion sur pourquoi ne pas convertir la valeur de retour de 'malloc()' et de la famille dans 'C'.] (Http://stackoverflow.com/q/605845/2173917). –
En définissant (vraisemblablement) un pointeur sur votre image en tant que type, vous avez rendu peu clair ce que vous allouez, et combien. 'image = (Image) malloc (sizeof (struct image)); 'semble louche, puisque vous avez utilisé' image' * et * 'struct image' et il n'est pas clair si vous allouez juste assez de mémoire pour un' pointeur'. C'est une mauvaise pratique de définir les types de pointeurs. –