Je suis en train de mettre en œuvre un algorithme polynomial diviser pour régner afin de pouvoir le comparer à une implémentation OpenCL, mais je ne peux pas obtenir malloc
pour fonctionner. Quand je lance le programme, il alloue un tas de choses, vérifie certaines choses, puis envoie le size/2
à l'algorithme. Puis, quand je frappe la ligne malloc
encore, il recrache ceci:Pourquoi j'obtiens une erreur d'assertion C malloc?
malloc.c: 3096: SysMalloc: Assertion `(old_top == (((mbinptr) (((char *) & ((av) - > bins [((1) - 1) * 2])) - __builtin_offsetof (struct malloc_chunk, fd)))) & & old_size == 0) || ((unsigned long) (old_size)> = (unsigned long) ((((builtin_offsetof (struct malloc_chunk, fd_nextsize)) + ((2 * (sizeof (taille_t))) - 1)) & ~ ((2 * (sizeof (size_t))) - 1))) & & ((old_top) -> taille & 0x1) & & ((unsigned long) old_end & pagemask) == 0) » a échoué. Aborted
La ligne en question est la suivante:
int *mult(int size, int *a, int *b) {
int *out,i, j, *tmp1, *tmp2, *tmp3, *tmpa1, *tmpa2, *tmpb1, *tmpb2,d, *res1, *res2;
fprintf(stdout, "size: %d\n", size);
out = (int *)malloc(sizeof(int) * size * 2);
}
je vérifier la taille d'un fprintf
, et il est un nombre entier positif (habituellement 50 à ce moment). J'ai essayé d'appeler malloc
avec un nombre simple ainsi et je reçois toujours l'erreur. Je suis juste perplexe à ce qui se passe, et rien de Google que j'ai trouvé jusqu'ici n'est utile.
Des idées? Que se passe-t-il? J'essaie de comprendre comment compiler un nouveau GCC au cas où il s'agirait d'une erreur de compilation, mais j'en doute vraiment.
Je soupçonne que le problème est en fait une ligne avant celle-là. Peut-être un double gratuit? –
troisième ligne du programme: int * mult (taille de int, int * a, int * b) { \t int * out, i, j, * tmp1, * tmp2, * TMP3, * tmpa1 , * tmpa2, * tmpb1, * tmpb2, d, * res1, * res2; Fprintf (stdout, "taille:% d \ n", taille) \t \t \t out = (int *) malloc (sizeof (int) * taille * 2); – Chris