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_connectionquerycallbackSelectNULL, &__last_error);
    if (
__last_result != SQLITE_OK)
    {
        
DBError("Errore nella query");
        return 
1;
    }
    else
        return 
0;
}

/* callback per select */
int callbackSelect(void *not_usedint row_fields_numberchar **row_valueschar **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 (
0row_fields_numberi++)
            {
                
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