When passing a char* as an argument to a function, should the called function do a free on that string? Otherwise the data would be “lost” right and the program would leak data. Or are char* handled in a special way by the compiler to avoid everyone from having to do free all the time and automatically deletes it one it goes out of scope? I pass “the string” to the function so not an instance to an already existing char*. Or should one use char[] instead? Just feels so dumb to set a fixed limit to the argument input.
Share
Keep this simple principle in mind: “always free memory at the same level that you allocated it”. In other words a function should never try to free memory that it itself has not allocated. A short example to clarify this:
Note that the function is not named
graphics_free_canvas ()or something like that, because the API may choose to free it or reuse it by returning it to a pool. The point is, it is an extremely bad programming practice to assume ownership of a resource that we did not create, unless we are specifically told otherwise.