Mystérieux malloc: sysmalloc: Assertion failed erreur
Je suis un mystérieux d'erreur et je n'ai aucune idée pourquoi. Ce code s'exécute plusieurs fois avant d'échouer, et il échoue toujours au même point.
Voici mon code:
assert(size > 0);
int* sorted = malloc(size * sizeof(int));
Et voici l'erreur que je reçois quand je le lance:
malloc.c:2369: 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(size_t))) - 1)) & ~((2 * (sizeof(size_t))) - 1))) && ((old_top)->size & 0x1) && ((unsigned long)old_end & pagemask) == 0)' failed.
J'ai essayé d'avoir l'impression de taille et c'est le 1er dans ce cas. Ce code s'exécute plusieurs fois avec différentes valeurs de la taille, y compris 1, avant d'échouer.
Quelqu'un a une idée de ce que je fais de mal?
Grâce.
Qu'est-ce que la ligne de 2369?`
double possible de Pourquoi dois-je avoir un C malloc échec d'assertion?
Je pense que cette ligne fait partie de la fonction malloc de la fonction elle-même, plutôt que de faire partie de l'affiche du code; il n'a sans doute pas la source de cette bibliothèque.
bon, je n'ai pas remarqué qu'il était
double possible de Pourquoi dois-je avoir un C malloc échec d'assertion?
Je pense que cette ligne fait partie de la fonction malloc de la fonction elle-même, plutôt que de faire partie de l'affiche du code; il n'a sans doute pas la source de cette bibliothèque.
bon, je n'ai pas remarqué qu'il était
malloc:2369
, je pensais que c'était dans son code source.OriginalL'auteur Ian | 2013-10-20
Vous devez vous connecter pour publier un commentaire.
Cela se produit généralement lorsque votre code
free
d une adresse non valide à un certain moment antérieur, ou écrit-delà de la fin du bloc de mémoire allouée. Exécutez votre code par valgrind ou une autre mémoire de profils pour voir où cela se produit.Ensuite, chercher des endroits où vous allouer de la mémoire, et de voir si vous avez toujours de fournir la bonne
sizeof
, et aussi que les indices dans cette mémoire sont corrects. C'est le plus méchant genre d'erreurs, il est extrêmement difficile de les trouver sans un profileur de mémoire.J'ai essayé de l'exécution du code par le biais de valgrind et j'ai trouvé quelques erreurs. Je vais essayer de fixation pour voir si l'erreur disparaît. Merci!
Qui était-il! J'ai lu en dehors de la mémoire qui m'a amené à plus tard écrire en dehors de la mémoire.
OriginalL'auteur dasblinkenlight