Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Handle a char array returned from a function in C

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.)

like image 930
SPQR3 Avatar asked Jun 05 '15 15:06

SPQR3


2 Answers

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.

like image 152
hugomg Avatar answered Oct 18 '22 05:10

hugomg


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.

like image 28
Quentin Avatar answered Oct 18 '22 03:10

Quentin