The analyzer detected a situation: a file was opened in one mode, but the called function expects it to be in the other.
For example, a file was opened in write-only mode, but it is used for reading:
bool read_file(void *ptr, size_t len)
{
FILE *file = fopen("file.txt", "wb"); // <=
if (file != NULL)
{
bool ok = fread(ptr, len, 1, file) == 1;
fclose(file);
return ok;
}
return false;
}
Most likely it's a typo. Use the correct mode to fix it:
bool read_file(void *ptr, size_t len)
{
FILE *file = fopen("file.txt", "rb"); // <=
if (file != NULL)
{
bool ok = fread(ptr, len, 1, file) == 1;
fclose(file);
return ok;
}
return false;
}
There also may be a situation when the fprintf function writes data into a closed file:
void do_something_with_file(FILE* file)
{
// ....
fclose(file);
}
void foo(void)
{
FILE *file = fopen("file.txt", "w");
if (file != NULL)
{
do_something_with_file(file);
fprintf(file, "writing additional data\n");
}
}
You should check the correctness of such use of resources in the program and fix the problem.
You can look at examples of errors detected by the V1075 diagnostic. |