elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Base de datos SQLite hace un Segmentation Fault al ejecutar sentencia SQL.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Base de datos SQLite hace un Segmentation Fault al ejecutar sentencia SQL.  (Leído 1,784 veces)
harry_the_blogger

Desconectado Desconectado

Mensajes: 105


Visita mi blog es enriquemesa.blogspot.com


Ver Perfil WWW
Base de datos SQLite hace un Segmentation Fault al ejecutar sentencia SQL.
« en: 19 Noviembre 2014, 16:11 pm »

Hola, estoy desarrollando una aplicacion sencilla que usa bases de datos SQLite en C/C++. Al hacer la consulta que crea una TABLA si no existe, la aplicacion hace una VIOLACION DE MEMORIA. He estado revisando con el depurador, pero no lo he podido conseguir.

No encontre un subforo adecuado para este tema, así que lo posteé aquí. Disculpen si aquí no iba. XD. El código es el siguiente:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <strings.h>
  4. #include <sqlite3.h>
  5.  
  6. ///Global variables
  7. sqlite3 *db;
  8. char *zErrMsg = 0;
  9. int rc;
  10. char sql[128];
  11.  
  12.   ///Used to extract interesting data from callbacks.
  13. int number_of_rows_fetched;
  14. int money;
  15. int money2;
  16. const char *data = "Callback function called!!\n";
  17.  
  18. ///This function is called each time that a row if found.
  19. ///The only way to keep tracking how many rows has the table,
  20. ///it's increasing the counter.
  21. static int callback(void *data, int argc, char **argv, char **azColName){
  22.   printf("Callback is running!!\n");
  23.  
  24.   return 0;
  25. }
  26.  
  27.  
  28. int init(){
  29.  
  30.    ///Open database
  31.   rc = sqlite3_open("bank.db", &db);
  32.   if(rc != SQLITE_OK){
  33.      fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
  34.      exit(0);
  35.   }else{
  36.      fprintf(stderr, "Opened database successfully\n");
  37.   }
  38.  
  39.  
  40.  
  41.   ///Create Table if it doesn't exist
  42.   memset(sql, 0, sizeof(sql));
  43.   strcat(sql, "CREATE TABLE accounts("  \
  44.         "id INT            NOT NULL," \
  45.         "username           TEXT    NOT NULL," \
  46.         "password           TEXT    NOT NULL," \
  47.         "cash               INT);");
  48.  
  49.   ///Run query
  50.   rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg);
  51.   printf("After the crash, i still alive\n");
  52.   if( rc != SQLITE_OK ){
  53.   fprintf(stderr, "SQL error: %s\n", zErrMsg);
  54.      sqlite3_free(zErrMsg);
  55.   }else{
  56.      fprintf(stdout, "Table created successfully\n");
  57.   }
  58.  
  59. }
  60.  
  61. int main(int argc, char* argv[])
  62. {
  63.  
  64.   init();
  65.  
  66.   return 0;
  67. }
  68.  
  69.  

Realmente he tenido dudas sobre si este tópico iría en este subforo, pero como no encuentro algo relacionado con Bases de Datos directamente, quise postearlo aqui.

Gracias de antemano.


En línea

Vista mi blog es enriquemesa.blogspot.com
engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Base de datos SQLite hace un Segmentation Fault al ejecutar sentencia SQL.
« Respuesta #1 en: 19 Noviembre 2014, 16:35 pm »

en que linea exactamente y que dice el error?


En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Base de datos SQLite hace un Segmentation Fault al ejecutar sentencia SQL.
« Respuesta #2 en: 19 Noviembre 2014, 16:50 pm »

¿Por qué declaras static la función callback?

He contado los caracteres, y tienes 145 caracteres en la variable 'sql' tras el strcat. No se si es cosa de tabulaciones, o es que en verdad es así. Cambia el tamaño de la variable (250 quizás) y revisa si sigue el problema.
« Última modificación: 19 Noviembre 2014, 16:57 pm por ivancea96 » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Entrada de datos desde consola y validación.[Segmentation fault](Resuelto)
Programación C/C++
Tha_Traker 5 3,940 Último mensaje 12 Mayo 2010, 18:23 pm
por Tha_Traker
Segmentation fault (core dumped)
Programación C/C++
neveldine 3 5,313 Último mensaje 3 Mayo 2012, 17:03 pm
por neveldine
Ayuda con segmentation fault
Programación C/C++
puppetz 7 3,054 Último mensaje 26 Junio 2014, 23:58 pm
por Eternal Idol
[Python] Excepción al consultar base de datos SQLite [RESUELTO]
Scripting
MA40 2 3,118 Último mensaje 23 Octubre 2016, 22:57 pm
por MA40
Obtenr Password de Base de Datos de SQLite 2.1
Bases de Datos
CM2ARY 1 2,510 Último mensaje 10 Octubre 2017, 17:43 pm
por Carloswaldo
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines