2009-07-08 4 views
0

Quand j'écris un programme C, j'ai rencontré un problème qui se présente comme suit:malloc.c: erreur 3074?

malloc.c: 3074: 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 (malloc_chunk struct, fd_nextsize)) + ((2 * (sizeof (size_t))) - 1)) & ~ ((2 * (sizeof (size_t))) - 1))) & & ((old_top) -> taille & 0x1) & & ((unsigned long) old_end & pagemask) == 0 ) a échoué.

Aidez-moi à résoudre le problème, merci d'avance!

+0

Cela ressemble à une mauvaise utilisation du tas. Vous devez fournir un extrait qui expose cela. – sharptooth

+0

Pouvez-vous le reproduire avec un petit exemple? Avec environ dix lignes de code. –

+0

J'utilise simplement la méthode malloc() pour avoir de la mémoire. Si je commente cette ligne, ce problème ne se produira pas. –

Répondre

2

Il semble que l'administration conservée pour l'allocation de mémoire a été corrompue. Ma conjecture serait que vous avez quelque chose comme un débordement de tampon quelque part avant que cette erreur se produit.

Comme l'erreur est le résultat d'un problème antérieur (en supposant que j'ai raison), cela peut être un problème assez difficile à résoudre. Peut-être qu'un outil comme valgrind peut vous aider à détecter des écritures incorrectes dans la mémoire. Si vous avez un petit programme qui démontre le problème, je suggère d'ajouter ce code à votre question.

+0

merci tout de même. –

+0

Mon programme est un peu grand, je ne peux pas afficher tous les codes ici. –