Záznam chyby: ZJIŠTĚNA KORUPCE HEAP: po normálním bloku

Bug Record Heap Corruption Detected



Nejprve pošlete původní obrázek chybové zprávy:
Zkontroloval jsem to a všichni řekli, že jde o přístup mimo hranice, což způsobilo, že tato chyba byla nahlášena, když byla uvolněna dynamická paměť. Ale poté, co jsem několikrát zkontroloval kód a nezjistil hranice, jsem ho našel hádáním. . .
Nejprve se podívejte na následující fragment kódu, který pravděpodobně obnoví můj chybový kód:

struct test{ char data[2] } test *t = (struct test *)malloc(sizeof(struct test)) fscanf(fp, '%d%d', t->data + 0, t->data + 1)

char s int Protože vztah mezi hodnotami ASCII lze kombinovat, jsem na to zvyklý. Aby se předešlo problémům se čtením a zápisem jednotlivých znaků při čtení a zápisu souboru, chci použít int Načíst formátovaný vstup char
Ukázalo se fscanf Neexistuje žádná interní kontrola typu. Data jsou čtena a kopírována přesně podle typu zadaného ve formátovacím řetězci, tj. Do char Zkopírujte část adresy int Velikost dat. Protože můj počítač je malý endian a char Při ukládání je uložen ve formě doplňku celočíselných dat podle hodnoty ASCII (všechny pozitivní, zkrácené vysoké bity neztratí data), proto postupujte char Typ je normální při čtení dat, ale poslední prvek pole bude při zápisu dat mimo hranice!