vérifier que "malloc" réussi dans C
Je veux allouer de la mémoire à l'aide de malloc
et vérifier qu'il a réussi. quelque chose comme:
if (!(new_list=(vlist)malloc(sizeof (var_list))))
return -1;
comment puis-je vérifier le succès?
Votre code peut déjà vérifier le succès. En cas d'échec, il renvoie -1, sur le succès, il poursuit à la ligne suivante. J'espère
vlist
est un typedef pour var_list*
.OriginalL'auteur SIMEL | 2011-04-09
Vous devez vous connecter pour publier un commentaire.
malloc
retourne un pointeur null en cas d'échec. Donc, si ce que vous avez reçu n'est pas null, alors il pointe vers un bloc valide de la mémoire.Depuis
NULL
évalue à false dans unif
déclaration, vous pouvez vérifier cela dans un très simple:My bad, j'ai tort supposé que C était comme C++ à cet égard.
dans C (contrairement au C++)
(void*)0
est un pointeur null constante. C'est parce quevoid*
pointeur en C (contrairement au C++) peut être implicitement converti à tout autre type de pointeur, il est donc possible d'autoriser les valeurs NULL pour avoirvoid*
type. Donc dans les deux langues NULL est une mise en œuvre définies par pointeur null constante, mais C implémentations ont plus de liberté.Sur certaines plates-formes NULL peut ne pas être égal à 0 mais certains addr comme 0xFFEE0000 donc, pour être sur un côté sécuritaire et portable, j'irais avec un if explicite (valeur != NULL)
est un null le pointeur constant, et qui est garanti pour évaluer à zéro. Si votre application n'est pas conforme avec la norme, je suis désolé pour vous, mais sur sane plates-formes que vous n'avez pas besoin de ce genre de vérification.
OriginalL'auteur Etienne de Martel
Homme page :
OriginalL'auteur Spyros
OriginalL'auteur jdehaan
Le code que vous avez déjà des tests pour l'erreur, bien que j'ai l'habitude d'écrire l'affectation et de vérifier que les deux lignes distinctes:
(Remarque deux petits changements, vous ne devriez pas jeter la valeur de retour, et nous prenons la taille de la variable plutôt que de son type afin de réduire le risque d'un décalage).
Si
malloc()
échoue, elle renvoie un pointeur null, ce qui est la seule valeur du pointeur est faux.La gestion d'erreur que vous avez est tout simplement
return -1;
- la façon dont vous gérer que dans l'appel de la fonction est à vous, vraiment.OriginalL'auteur Toby Speight