Ich habe einige Probleme mit diesem Code-Snippet.Ungültiges Schreiben in Realloc-Aufruf
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;
}
Ich erhalte eine "malloc.c: 2842: mremap_chunk. Assertion` ((Größe + Offset) & (_rtld_global_ro._dl_pagesize - 1)) == 0' ist fehlgeschlagen" Fehler beim Ausführen. Valgrind sagt mir, dass es einen ungültigen Schreibvorgang der Größe 8 im Realloc-Aufruf gibt. Was ist los? Bedingung und foo sind Teil einer Unordnung der Dateianalyse, die keine der oben genannten Variablen verwendet oder modifiziert.
Haben Sie (zB Erhöhung,) 'defines' irgendwo ändern? – tkausl
Es scheint, dass Sie die Heap-Datenstrukturen durch Überschreiben einiger Datenbereiche außerhalb des zugewiesenen Bereichs beschädigt haben. Dies könnte aufgrund eines unkontrollierten Zugriffs geschehen sein. Der Code, der im '...' steckt, ist wichtig, um das herauszufinden. –
@tkausl Kontrolle F sagt nein. – SonicN