Allora dato l'orario potrei anche sbagliare, ma chredo che il problema sia dovuto al fatto che non allochi effettivamente le matrice di caratteri (insomma i doppi puntatori) della struttura, ho provato a modificare il codice per adattarlo alla mancanza delle interfacce sqlite e ne ho ricavato questo:
codice:
int callbackSelect(void *not_used, int row_fields_number, char **row_values, char **row_fields)
{
int i;
char new_fields[row_fields_number][200]; //questi li puoi eliminare
char new_values[row_fields_number][200];//idem come sopra
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(char*)*row_fields_number);//qui allochi i putatori ai puntatori
new_row->fields = (char**)malloc(sizeof(char*)*row_fields_number);//idem come sopra
if (new_row->values == NULL || new_row->fields == NULL)
{
DBError("Memoria esaurita");
return 1;
}
else
{
//Questo è il codice che ho aggiunto. Per ogni puntatore a puntatore creato allochi un array di caratteri di 200.
for(i = 0; i < row_fields_number; i++)
{
new_row->values[i] = (char*)malloc(sizeof(char)*200);
new_row->fields[i] = (char*)malloc(sizeof(char)*200);
}
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;
}
}
}
Spero ti sia di aiuto