mcheck(3) Library Functions Manual mcheck(3) NUME mcheck, mcheck_check_all, mcheck_pedantic, mprobe - verifica consistena gramezii BIBLIOTECA Biblioteca C standard (libc, -lc) SINOPSIS #include int mcheck(typeof(void (enum mcheck_status mstatus)) *f); int mcheck_pedantic( typeof(void (enum mcheck_status mstatus)) *f); void mcheck_check_all(void); enum mcheck_status mprobe(void *ptr); DESCRIERE Funcia mcheck() instaleaza un set de carlige de depanare pentru familia de funcii de alocare a memoriei malloc(3). Aceste carlige determina efectuarea anumitor verificari de consistena asupra starii gramezii. Verificarile pot detecta erori ale aplicaiei, cum ar fi eliberarea unui bloc de memorie de mai multe ori sau coruperea structurilor de date de evidena care preced imediat un bloc de memorie alocat. Pentru a fi eficienta, funcia mcheck() trebuie sa fie apelata inainte de primul apel la malloc(3) sau la o funcie conexa. In cazurile in care acest lucru este dificil de asigurat, legarea programului cu -lmcheck insereaza un apel implicit la mcheck() (cu un argument NULL) inainte de primul apel la o funcie de alocare a memoriei. Funcia mcheck_pedantic() este similara cu mcheck(), dar efectueaza verificari asupra tuturor blocurilor alocate ori de cate ori este apelata una dintre funciile de alocare a memoriei. Acest lucru poate fi foarte lent! Funcia mcheck_check_check_all() determina o verificare imediata a tuturor blocurilor alocate. Acest apel este eficient numai daca mcheck() este apelata mai inainte. In cazul in care sistemul detecteaza o inconsistena in gramada, funcia furnizata de apelant, indicata de f, este invocata cu un singur argument, mstatus, care indica ce tip de inconsistena a fost detectata. Daca f este NULL, o funcie implicita afieaza un mesaj de eroare la stderr i apeleaza abort(3). Funcia mprobe() efectueaza o verificare a consistenei blocului de memorie alocat indicat de ptr. Funcia mcheck() trebuie apelata in prealabil (in caz contrar, mprobe() returneaza MCHCHECK_DISABLED). Urmatoarea lista descrie valorile returnate de mprobe() sau pasatee ca argument mstatus atunci cand este invocata f: MCHECK_DISABLED (doar mprobe()) mcheck() nu a fost apelata inainte de a fi apelata prima funcie de alocare a memoriei. Verificarea consistenei nu este posibila. MCHECK_OK (doar mprobe()) Nu s-a detectat nicio inconsecvena. MCHECK_HEAD Memoria anterioara unui bloc alocat a fost alterata. MCHECK_TAIL Memoria care a urmat unui bloc alocat a fost alterata. MCHECK_FREE Un bloc de memorie a fost eliberat de doua ori. VALOAREA RETURNATA mcheck() i mcheck_pedantic() returneaza 0 in caz de succes, sau -1 in caz de eroare. ATRIBUTE Pentru o explicaie a termenilor folosii in aceasta seciune, a se vedea attributes(7). +---------------------------+---------------------+--------------------+ |Interfaa | Atribut | Valoare | +---------------------------+---------------------+--------------------+ |mcheck(), | Sigurana firelor | MT-Unsafe | |mcheck_pedantic(), | | race:mcheck | |mcheck_check_all(), | | const:malloc_hooks | |mprobe() | | | +---------------------------+---------------------+--------------------+ STANDARDE GNU. ISTORIC mcheck_pedantic() mcheck_check_all() glibc 2.2. mcheck() mprobe() glibc 2.0. NOTE Legarea unui program cu -lmcheck i utilizarea variabilei de mediu MALLOC_CHECK_ (descrisa in mallopt(3)) determina detectarea acelorai tipuri de erori. Insa, utilizarea MALLOC_CHECK_ nu necesita relegarea aplicaiei. EXEMPLE Programul de mai jos apeleaza mcheck() cu un argument NULL i apoi elibereaza acelai bloc de memorie de doua ori. Urmatoarea sesiune shell demonstreaza ce se intampla la rularea programului: $ ./a.out Pe cale sa se elibereze Pe cale sa se elibereze a doua oara bloc eliberat de doua ori Operaie abandonata (memorie descarcata) Sursa programului #include #include #include int main(void) { char *p; if (mcheck(NULL) != 0) { fprintf(stderr, "mcheck() a euat\n"); exit(EXIT_FAILURE); } p = malloc(1000); fprintf(stderr, "Pe cale sa se elibereze\n"); free(p); fprintf(stderr, "\nPe cale sa se elibereze a doua oara\n"); free(p); exit(EXIT_SUCCESS); } CONSULTAI I malloc(3), mallopt(3), mtrace(3) TRADUCERE Traducerea in limba romana a acestui manual a fost facuta de Remus- Gabriel Chelu Aceasta traducere este documentaie gratuita; citii Licena publica generala GNU Versiunea 3 sau o versiune ulterioara cu privire la condiii privind drepturile de autor. NU se asuma NICIO RESPONSABILITATE. Daca gasii erori in traducerea acestui manual, va rugam sa trimitei un e-mail la . Pagini de manual de Linux 6.15 5 iunie 2025 mcheck(3)