Calling fclose
twice with the same stream is undefined behaviour - most likely crash. There is no way to check if FILE*
has been closed already, so the safe solution is to set pointer to NULL as soon as it is closed:
fclose(fh);
fh = NULL;
Sources: "The value of a pointer to a FILE object is indeterminate after the associated file is closed" (C draft standard). "After the call to fclose(), any use of stream causes undefined behaviour." (The Single UNIX ? Specification).
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…