Example
(_uheap_walk -- Return Information about Memory Heap)
This example creates a heap and performs memory
operations on it. _uheap_walk then traverses the heap and calls
callback_function for each memory object. The callback_function
prints a message about each memory block.#include <stdlib.h>
#include <stdio.h>
#include <umalloc.h>
int _Optlink callback_function(const void *pentry, size_t sz, int useflag,
int status, const char *filename, size_t line)
{
if (_HEAPOK != status) {
puts("status is not _HEAPOK.");
exit(status);
}
if (_USEDENTRY == useflag)
printf("allocated %p %u\n", pentry, sz);
else
printf("freed %p %u\n", pentry, sz);
return 0;
}
int main(void)
{
Heap_t myheap;
char *p1, *p2, *p3;
/* User default heap as user heap */
myheap = _udefault(NULL);
if (NULL == (p1 = (char*)_umalloc(myheap, 100)) ||
NULL == (p2 = (char*)_umalloc(myheap, 200)) ||
NULL == (p3 = (char*)_umalloc(myheap, 300))) {
puts("Cannot allocate memory from user heap.");
exit(EXIT_FAILURE);
}
free(p2);
puts("usage address size\n----- ------- ----");
_uheap_walk(myheap, callback_function);
free(p1);
free(p3);
return 0;
/***********************************************************************
The output should be similar to:
usage address size
----- ------- ----
allocated 73A20 300
allocated 738C0 100
:
:
freed 73930 224
***********************************************************************/
}