Je rencontre des problèmes avec cet extrait de code.Écriture incorrecte dans l'appel de realloc
size_t* defines = malloc(sizeof *defines);
if (!defines)
exit(1);
size_t def_cap = 1;
size_t def_size = 0;
...
for(condition) {
...
if (def_size == def_cap) {
void* tmp = realloc(defines, def_cap*=2);
if(!tmp)
exit(1);
defines = tmp;
}
defines[def_size++] = foo;
}
Je reçois un "malloc.c: 2842: mremap_chunk: Assertion` ((taille + offset) & (_rtld_global_ro._dl_pagesize - 1)) == 0' a échoué." erreur quand je cours. Valgrind me dit qu'il y a une écriture invalide de taille 8 dans l'appel de realloc. Que se passe-t-il? condition et foo font partie d'un désordre d'analyse de fichiers qui n'utilise ou ne modifie aucune des variables ci-dessus.
-vous changer (incrément, par exemple) 'defines' quelque part? – tkausl
Il semble que vous ayez corrompu les structures de données de segment en écrasant certaines plages de données en dehors de la zone allouée. Cela aurait pu se produire en raison d'un accès hors limite. Le code qui est dans le '...' est essentiel pour comprendre cela. –
@tkausl Contrôle F dit non. – SonicN