Je suis novice en programmation C et je n'ai pas trouvé de solution à mon problème. Bien que le code fonctionne (je suis en mesure de l'inclure dans un autre programme), quand il tente de libérer la mémoire allouée par calloc(), elle renvoie l'erreur suivante:Libérer un tableau de mpc_t en C
free(): invalid next size (normal):
followd par ce qui semble être une adresse mémoire. J'utilise des bibliothèques mpc (pour des nombres complexes de précision arbitraire). C'est le plus petit programme qui répète l'erreur:
#include <stdio.h>
#include <stdlib.h>
#include <gmp.h>
#include <mpfr.h>
#include <mpc.h>
int N = 10;
int precision = 512;
int main(void) {
mpc_t *dets2;
dets2 = (mpc_t*)calloc(N-2,sizeof(mpc_t));
for (int i = 0; i<=N-2; i++) {
mpc_init2(dets2[i],512); //initialize all complex numbers
mpc_set_str(dets2[i],"1",0,MPFR_RNDN); //set all the numbers to one
}
free(dets2); //release the memory occupied by those numbers
return 0;
}
Merci pour votre aide!
la condition dans votre boucle for doit être 'i
mch
@mch - bonne prise; votre commentaire devrait être une réponse. –
Merci @mch! Cela résout le problème. Donc, ce que j'essaie de faire avec mon code erroné est de stocker N-1 mpf_t dans un espace qui ne peut gérer que N-2 mpf_t. Je pensais que cela aurait produit une erreur de segmentation, ou quelque chose comme ça. –