2017-08-28 12 views
2

Je recherche spécifiquement le mot dans la norme C11 (ISO/IEC 9899: 2011), ou une page POSIX. J'ai vérifié le POSIX manual for fwrite, mais il ne mentionne pas comportement indéfini du tout. Cependant, le manual for fclose indique queLes opérations telles que fwrite et fread ont-elles un comportement indéfini lorsque stream est nul?

Après l'appel à fclose(), toute utilisation de flux entraîne un comportement indéfini.

Mais je ne vois toujours pas si un flux NULL provoque UB.

+1

7.1.4p1 s'applique sauf si substitué et il n'est pas remplacé pour 'fread' ou' fwrite' –

+1

Le comportement peut être indéfini même s'il n'est pas explicitement mentionné comme tel. Prenez verbalement le terme "indéfini", quelque chose n'est pas défini s'il n'est pas défini. –

Répondre

2

Les deux fread() et fwrite() attendent l'argument flux d'être une valeur retournée par un appel réussi à fopen(), fdopen() ou freopen(). Comme ces fonctions renvoient NULL en cas d'erreur, l'argument flux ne peut pas être NULL.

Depuis la page de manuel ne dit pas ce qui se passe quand flux n'est pas une valeur retournée par un appel réussi à fopen() etc., cela signifie que la page de manuel ne dit pas ce qui se passe quand flux n'est pas une valeur retournée par un appel réussi à fopen() etc., ou, en d'autres termes, le comportement n'est pas défini.

Voir aussi la réponse acceptée à la question "Why glibc's fclose(NULL) cause segmentation fault instead of returning error" sur ce tableau.