Richard Boyd wrote:
Basically I have a structure I use to hold data results:
//=====================
typedef struct {
char *sqlStatement; // Either the sqlstatement to be executed or the
last statement that was executed
char **results; // the result stored in an array
char *err_msg; // the error message
int numrows; // number of rows of results
int numcols; // the number of columns of data returned
} RESULT_T;
//=======================
I pass this structure to a wrapper function that ultimately calls
sqlite3_get_table and returns the results structure on tresults
//=======================
int execute_command (size_t nbytes, char *command, RESULT_T
*tresults)
//=======================
In the function that calls execute_command(), I want to free up the memory
that was allocated by sqlite3_get_table().
Do I just call the free function like this:
sqlite3_free_table(tresults.results); (assuming that I created a variable
called ‘tresults’ of type RESULT_T in the calling function).
Also, how do I free up the error messages? What if there are no results
returned by sqlite3_get_table, can I still attempt to free up the memory
with ‘sqlite3_free_table’
I appreciate you reading down this far, and sorry if my code snips are hard
to follow!!
Richard,
Your call to sqlite3_free_table is correct.
You free the error message by calling sqlite3_free(tresult.err_msg).
If either pointer returned by sqlite3_get_table() is NULL, then no
memory was allocated, so there is no need to free it, however I believe
it should be safe to call the free routines with a NULL pointer.
HTH
Dennis Cote