Dois-je vérifier si la fonction malloc() a été un succès?

Doit-on vérifier après chaque malloc() si elle a été un succès? Est-il possible qu'un malloc() échoue? Ce qui arrive ensuite?

À l'école on nous a dit que nous devrions vérifier, c'est à dire.:

arr = (int) malloc(sizeof(int)*x*y);
if(arr==NULL){
    printf("Error. Allocation was unsuccessful. \n");
    return 1;
}

Qu'est-ce que la pratique sur cette question? Puis-je faire de cette façon:

if(!(arr = (int) malloc(sizeof(int)*x*y))
    <error>
  • En théorie, oui. En réalité, si la fonction malloc échoue, le système d'exploitation est probablement sur le point de se bloquer. PS: Votre deuxième exemple est beaucoup plus difficile à lire que le premier et doit être rejetée par une révision du code.
  • arr = (int) malloc(...) est faux, malloc retourne un pointeur. En dehors de cela: oui, vous devez vérifier s'il échoue, car il peut échouer. en outre, le casting de sa valeur de retour est dangereux.
  • 1. Vous n'avez pas besoin de la fonte. 2. Oui vérifier pourquoi pas
  • Je dirais que c'est oui dans la théorie et dans la pratique, en particulier lorsque les gros tampons sont alloués.
  • Vrai. Mais si vous allouer une mémoire tampon si grande que malloc peut échouer, alors je dirais un nouveau design est en ordre.
  • Normalement oui, je suis d'accord. Mais on peut venir avec une application qui utilise le plus de mémoire possible". Mais ma principale raison pour le commentaire que quelqu'un pourrait mal lu votre remarque que "dans la pratique, ne cochez pas". (C'est une autre question si on doit ajouter if à chaque malloc ou tout simplement l'enveloppe et mettre fin à l'application avec un bon message.)
  • pratique, ne cochez pas la case" je dirais que, "dans la pratique, parfois c'est bien de ne pas vérifier, car il finit par encombrer le code de l'espace et si l'affectation de 10 octets échoue, votre programme est déjà en panne ou est sur le point de". Note: je écrire du code pour être comme à tolérance de panne possible: je regarde des deux côtés lors de la traversée d'une rue à sens unique.

InformationsquelleAutor gen | 2014-11-09