fork download
  1. #include <stdio.h>
  2. #include <stdlib.h> // malloc, free
  3.  
  4. void *my_malloc(size_t size);
  5. void *my_realloc(void *oldptr, size_t new_size);
  6. void my_free(void *ptr);
  7. size_t my_memsize(void *ptr);
  8.  
  9. int main(void) {
  10. char *ptr = my_malloc(40);
  11. printf("Allocated size = %u\n", my_memsize(ptr));
  12. my_free(ptr);
  13. return 0;
  14. }
  15.  
  16. void *my_malloc(size_t size) {
  17. register size_t *tmp = (size_t *) malloc(size + sizeof(size_t));
  18. *tmp = size;
  19. return tmp + 1;
  20. }
  21. void *my_realloc(void *oldptr, size_t new_size) {
  22. register size_t *tmp = (size_t *) realloc((size_t *)oldptr - 1, new_size + sizeof(size_t));
  23. *tmp = new_size;
  24. return tmp + 1;
  25. }
  26. void my_free(void *ptr) {
  27. free((size_t *)ptr - 1);
  28. }
  29. size_t my_memsize(void *ptr) {
  30. return *((size_t *)ptr - 1);
  31. }
Success #stdin #stdout 0s 2008KB
stdin
Standard input is empty
stdout
Allocated size = 40