I have a code like this:
std::string getInfo(FILE *fp)
{
char buffer[30];
if (fread(buffer, 19, 1, fp) == 1)
buffer[19] = '\0';
else
buffer[0] = '\0';
return buffer;
}
I'm using cppcheck for static analysis and it spits a warning:
error: Resource leak: fp [resourceLeak]
return buffer;
^
The way I see it, since the return is by value, the data will be copied from "buffer" into std::string's storage, so there's no leak there.
Does this pose some real problem or is it a false positive?
You are not leaking any resource from this function. So, if you're only analyzing this function, this is a bug in your cppcheck. However, as @Taekahn points out - maybe the leak is elsewhere in your program.
Also, since you're returning
std::string
, you can use a constructor taking a pointer and a count, and not bother with the '\0' in the buffer:If you're using C++23, you might consider returning an
std::expected
instead of the empty string, e.g. something like: