CCmalloc -=-=-=-=-= The Magician of the Ivory Tower brought his latest invention for the master programmer to examine. The magician wheeled a large black box into the master's office while the master waited in silence. "This is an integrated, distributed, general-purpose workstation," began the magician, "ergonomically designed with a proprietary operating system, sixth generation languages, and multiple state of the art user interfaces. It took my assistants several hundred man years to construct. Is it not amazing?" The master raised his eyebrows slightly. "It is indeed amazing," he said. "Corporate Headquarters has commanded," continued the magician, "that everyone use this workstation as a platform for new programs. Do you agree to this?" "Certainly," replied the master, "I will have it transported to the data center immediately!" And the magician returned to his tower, well pleased. Several days later, a novice wandered into the office of the master programmer and said, "I cannot find the listing for my new program. Do you know where it might be?" "Yes," replied the master, "the listings are stacked on the platform in the data center." -- Geoffrey James, "The Tao of Programming" Další poměrně šikovnou knihovnou pro kontrolu paměti je ccmalloc. Ta se specializuje zejména na hledání zapomenutých bloků, ale podporuje i některé další testy. Umí velmi pěkně nakonci sepsat seznam zapomenutých bloků srovnaných podle velikosti, nebo jiných kriterií. Zobrazuje také některé užitečné statistiky, jako je maximální použitá paměť atd. Její použití je velmi podobné jako u libefence, nebo jiných knihoven. Hlavní sílu ccmallocu vidím v jeho jednoduchosti na použití a poměrně pěkně zpracováných výpisech. Výsledky testů jsou následující: Chyby pro použití haldy zapomenuté naalokované bloky paměti najde a ukáže řádky uvolnění nenaalokovaného bloku free() in wrapper called before malloc() vícenásobné uvolnění bloku free() called twice for block at 0x080587d0 of size 100, kde byl naalokován a kde byl už uvolněn alokace a realokace bloku o velikosti 0 malloc(0) použití paměti bez testu na selhání malloc Chyby pro použití ukazatelů použití uvolněného bloku pro zápis použití uvolněného bloku pro čtení zápis za koncem pole v zásobníku (buffer owerflow) zápis za koncem alokovaného bloku check-count=3: end of block at 0x080587e0 of size 10 changed, ukáže, kde byl naalokován čtení za koncem alokovaného bloku zápis daleko za koncem alokovaného bloku zápis před koncem alokovaného bloku (perhaps an 'under'write occured) čtení před koncem alokovaného bloku čtení neinicalizované paměti Zdrojové kódy najdete na: sunsite.ms.mff.cuni.cz/pub/Linux/devel/lang/c. Podporované platofrmy: Linux, SunOS 4.3.1, Solaris 2.5 (aka SunOS 5.5) výheň