Base de datos SQLite hace un Segmentation Fault al ejecutar sentencia SQL.

Iniciado por harry_the_blogger, 19 Noviembre 2014, 16:11 PM

0 Miembros y 1 Visitante están viendo este tema.

harry_the_blogger

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 (cpp) [Seleccionar]

#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
#include <sqlite3.h>

///Global variables
sqlite3 *db;
char *zErrMsg = 0;
int rc;
char sql[128];

   ///Used to extract interesting data from callbacks.
int number_of_rows_fetched;
int money;
int money2;
const char *data = "Callback function called!!\n";

///This function is called each time that a row if found.
///The only way to keep tracking how many rows has the table,
///it's increasing the counter.
static int callback(void *data, int argc, char **argv, char **azColName){
   printf("Callback is running!!\n");
   
   return 0;
}


int init(){

    ///Open database
   rc = sqlite3_open("bank.db", &db);
   if(rc != SQLITE_OK){
      fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
      exit(0);
   }else{
      fprintf(stderr, "Opened database successfully\n");
   }



   ///Create Table if it doesn't exist
   memset(sql, 0, sizeof(sql));
   strcat(sql, "CREATE TABLE accounts("  \
         "id INT            NOT NULL," \
         "username           TEXT    NOT NULL," \
         "password           TEXT    NOT NULL," \
         "cash               INT);");

   ///Run query
   rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg);
   printf("After the crash, i still alive\n");
   if( rc != SQLITE_OK ){
   fprintf(stderr, "SQL error: %s\n", zErrMsg);
      sqlite3_free(zErrMsg);
   }else{
      fprintf(stdout, "Table created successfully\n");
   }

}

int main(int argc, char* argv[])
{

   init();

   return 0;
}



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.
Vista mi blog es enriquemesa.blogspot.com

engel lex

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

#2
¿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.