Tak jeste jinak, chybu zpusoboval tento, blbe napsany kod: 118 static void block_check (void *addr) 119 { 120 /* Calculate the position of the header. */ 121 heap_block_head_t *head = (heap_block_head_t *) addr; 122 123 /* Make sure the header is still intact. */ 124 assert (head->magic == HEAP_BLOCK_HEAD_MAGIC); 125 126 /* Calculate the position of the footer. */ 127 heap_block_foot_t *foot 128 = (heap_block_foot_t *) (addr + head->size - sizeof (heap_block_foot_t)); 129 130 /* Make sure the footer is still intact. */ 131 assert (foot->magic == HEAP_BLOCK_FOOT_MAGIC); 132 133 /* And one extra check for the fun of it. */ 134 assert (head->size == foot->size); 135 } Melo by stacit rozdelit inicializaci na dva radky... Vecer to udelam. Chyba neni v assertu, ale v te funkci v mm/malloc.c Lukas Dne 11. listopad 2008 1:23 Lukas Jezek <lukas.jezek@xxxxxxxxx> napsal(a): > V pripade, ze se makro assert exportuje na prazdny prikaz, tak dojde k tomu, > ze kdyz sis predtim vytvoril promennou, kterou chces assertovat, ale dal ji > nepouzijes, tak dostanes warningem - resp. errorem. > > Takze by asi bylo dobry, kdyby se assert bez debug prekladal na if (podm) {} > > L. > > Jiri Horky napsal(a): >> >> hele koukam do toho kodu na ten assert a ktera promenna je nepouzita? >> >> Lukas Jezek wrote: >>> >>> Zdarec, >>> >>> mam pocit, ze je assert definovanej spatne, kdyz zadefinuju NDEBUG, tak >>> mi to na spouste mist hlasi, ze promenna je nepouzita - asi by bylo dobry, >>> kdyby se assert prekladal na prazdny if v pripade, ze se nema debuzit - >>> prekladac to stejne odstrani... >>> >>> Co vy na to? >>> >>> Jo, do c.h jsem vyrobil makra na pridani magicku do struktur a jejich >>> kontrolu, ktery se v zavislosti na definici symbolu NDEBUG expanduji na >>> skutecny kod nebo prazdna makra. >>> >>> V timerech a mutexech pak po pulnoci (resp. radsi rano) uvidite pouziti - >>> celkem krasny a lehky :D >>> >>> >>> L. >>> >>> >> > >