Ciao, è un po' che non posto su questo forum quindi ciao a tutti, è come se fossi nuovo! 
Dopo anni di php e java mi sono deciso ad impare a programmare in C da autodidatta. Purtroppo però ho qualche dubbio. Per iniziare un porgettino sto programmando un wrapper per sqlite, molto molto semplice.
Il codice che ho scritto fino adesso è questo. Chiedo scusa in anticipo per gli strafalcioni che posso aver scritto!!
Riporto qua solo le parti di codice necessarie a capire dov'è l'errore, almeno spero
Codice PHP:
/* puntatore al tipo di dato "rislutato" */
typedef struct DBResult *DBRow;
/* struttura che definisce il tipo di dato "rislutato" */
typedef struct DBResult
{
char **fields;
char **values;
int fields_number;
DBRow next;
} DBResult;
...
/* connessione al database */
sqlite *__db_connection;
/* nome del database */
char *__db_name;
/* ultimo risultato tornato */
int __last_result;
/* ultima query eseguita */
char *__last_query;
/* ultimo messaggio d'errore riscontrato */
char *__last_error = 0;
/* puntatore alle righe del risultato */
DBRow __result_rows = NULL;
/* puntatore alla riga corrente del risultato */
DBRow __current_row = NULL;
...
main()
{
...
DBRow dbh;
connectToDB("./prova.db");
DBSelect("SELECT * FROM pippo2;");
closeDBConnection();
while ((dbh = nextDBRow()))
{
printf("%s = %s", dbh->fields[0], dbh->values[0]);
printf("\n");
}
...
}
...
/* funzione che esegue una query di select */
int DBSelect(char *query)
{
__last_result = sqlite_exec(__db_connection, query, callbackSelect, NULL, &__last_error);
if (__last_result != SQLITE_OK)
{
DBError("Errore nella query");
return 1;
}
else
return 0;
}
/* callback per select */
int callbackSelect(void *not_used, int row_fields_number, char **row_values, char **row_fields)
{
int i;
char new_fields[row_fields_number][200];
char new_values[row_fields_number][200];
DBRow new_row;
new_row = (DBRow)malloc(sizeof(DBResult));
if (new_row == NULL)
{
DBError("Memoria esaurita");
return 1;
}
else
{
new_row->values = (char**)malloc(sizeof(new_values));
new_row->fields = (char**)malloc(sizeof(new_fields));
if (new_row->values == NULL || new_row->fields == NULL)
{
DBError("Memoria esaurita");
return 1;
}
else
{
for (i = 0; i < row_fields_number; i++)
{
strcpy(new_row->values[i], row_values[i]);
strcpy(new_row->fields[i], row_fields[i]);
}
new_row->fields_number = row_fields_number;
new_row->next = __result_rows;
__result_rows = new_row;
__current_row = new_row;
return 0;
}
}
}
/* restituisce un puntatore alla riga corrente e si sposta alla successiva */
DBRow nextDBRow()
{
DBRow current_row;
if (__current_row == NULL)
return NULL;
else
{
current_row = __current_row;
__current_row = current_row->next;
return current_row;
}
}
...
Il problema è che quando chiamo
Codice PHP:
printf("%s = %s", dbh->fields[0], dbh->values[0]);
nel main mi da un segmentation fault.
Sono sicuro che il problema è nella malloc chiamata nella funzione di callback ma non riesco a venirne fuori.
Se ho fatto una domanda troppo in dettaglio chiedo scusa. Grazie a chi mi darà una mano 
PS: il riquadro dice "codice php" ma è C ovviamente