So, I’m planning to use sqlite3 to update skype’s main.db file.
I use sqlite3_open function to open the connection like this.
int rc = sqlite3_open(filepath,db);
I’m trying to do the filepath string dynamically, but a weird error is driving me crazy.
I have two strings szFile and szFilePath, szFile being a test string which will contain the actual path of the db file, and szFilePath is the same string only this time dynamically generated by a function.
The thing is just before the execution of sqlite3_open function, both strings as you see on the screenshot are identical, I even posted memory for you to see.
Look at pictures:
Picture 1
Picture 2
Now, despite being completely identical, no matter how many times I run this code ONLY szFile works, with the other one giving me a “cannot open file path” error, and completely confusing me. Also, I don’t no if this is normal, but by setting a breakpoint at the next if, I can see that szFilePath loses it’s value (is filled with c hex values).
What could be wrong?
You’re returning a char* that points to an array on the stack – as soon as you return from the function
szGetFilePath, this pointer is quite possibly pointing to junk (it will definitely point to junk after a couple of levels of additional calls – when the values on the stack are overwritten).You can either return a dynamically allocated array of char (i.e.
malloced) from the function (and remember tofreeit later), or pass a pointer to a char array through toszGetFilePathand put the character data into this.