I am using a library called tinyXML, which parses XML files. Many of its methods return a const char*.
After having read this question: how to return a char array from a function in C
I now believe that every time a method returns a char* it is the caller's (my) responsibility to explicitly free it, because it is probably allocated dynamically on the heap. Am I right / wrong? What can I assume?
(If I ever wrote a library I would much rather return std::string instead of char* arrays, because they are so much simpler for the user.)
You can't assume anything and must check the documentation for the method you are calling to know if you must free the pointer or not. Sometimes a function returning a const char *
might be returning a statically allocated string:
const char *getName(){
return "SPQR3";
}
Or it might be a pointer that is someone else's responsibility to free. For example, strcpy
's return value is the same as the pointer you pass to it as input.
Read the library's documentation. Both usages (pointer to an internal buffer, or pointer to a dynamically-allocated buffer) are common, and aren't distinguishable from the function prototype alone.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With