Erreur de segmentation lors d'accès à un tableau
Bonjour,
Je dispose d'une base de données avec des numéros de téléphone, je souhaite récupérer ces numéros depuis mon programme c++. J'ai donc créer une fonction callback que j'utilise lors de l'appel de sqlite3_exec.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| int SMS::setRecipients(){
char** recipients;
recipients = (char**) malloc(128*sizeof(char*));
for(int i = 0; i < 128; i++)
recipients[i] = (char*) malloc(16 * sizeof(char));
recipients[0] = "1";
bd.setSql("SELECT tel FROM Sms WHERE etat = 1");
sqlite3_exec(bd.getConnection(), bd.getSql().c_str(), callbackGetRecipients, recipients, NULL);
std::cout << "requete : ok" << std::endl;
for(int i = 1; i < atoi(recipients[0]); i++){
this->recipients += "*";
this->recipients += recipients[i];
}
std::cout << this->recipients << std::endl;
} |
Code:
1 2 3 4 5 6 7 8 9 10 11
| int callbackGetRecipients(void *recipients, int nbCol, char** res, char** name){
char **temp = (char **)recipients;
int i = atoi(temp[0]);
strcpy(temp[i], res[0]);
i++;
char buffer[16];
memset(buffer, 0, 16);
sprintf(buffer, "%d", i);
strcpy(temp[0], buffer);
return 0;
} |
La fonction callback est appelée pour chaque ligne retournée par la base de données. Afin de savoir quel ligne je suis en train de traiter j'incrémente la variable i et je stock son résultat dans la case 0 du tableau "recipients". A chaque passage dans la fonction callback je récupère la valeur contenu dans recipients[0] afin de savoir dans quel case je dois stocker le résultat.
L'erreur intervient sur la ligne 10 de la fonction callback : "Erreur de segmentation".
Cependant si je remplace strcpy(temp[0], buffer); par strcpy(temp[1], buffer); (en changeant de case), je n'ai plus cet erreur.
Je ne peux donc pas avoir accès à la même case que celle que j'ai utilisé pour la récupération de l'index (i).
Je ne comprend pas à quoi est dû cet erreur, si quelqu'un peut m'aider ... :zoubi: