malloc.c 1012 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #include <unistd.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <stdio.h>
  5. #define N_PTRS 1000
  6. #define N_ALLOCS 10000
  7. #define MAX_SIZE 0x10000
  8. #define random_size() (random()%MAX_SIZE)
  9. #define random_ptr() (random()%N_PTRS)
  10. void test1(void);
  11. void test2(void);
  12. int main(int argc,char *argv[])
  13. {
  14. test1();
  15. test2();
  16. return 0;
  17. }
  18. void test1(void)
  19. {
  20. void **ptrs;
  21. int i,j;
  22. int size;
  23. srandom(0x19730929);
  24. ptrs = malloc(N_PTRS*sizeof(void *));
  25. for(i=0;i<N_PTRS;i++){
  26. ptrs[i]=malloc(random_size());
  27. }
  28. for(i=0;i<N_ALLOCS;i++){
  29. j=random_ptr();
  30. free(ptrs[j]);
  31. size=random_size();
  32. ptrs[j]=malloc(size);
  33. if(!ptrs[j]){
  34. printf("malloc failed! %d\n",i);
  35. }
  36. memset(ptrs[j],0,size);
  37. }
  38. for(i=0;i<N_PTRS;i++){
  39. free(ptrs[i]);
  40. }
  41. }
  42. void test2(void)
  43. {
  44. void *ptr = NULL;
  45. ptr = realloc(ptr,100);
  46. if(!ptr){
  47. printf("couldn't realloc() a NULL pointer\n");
  48. }else{
  49. free(ptr);
  50. }
  51. ptr = malloc(100);
  52. ptr = realloc(ptr, 0);
  53. if(ptr){
  54. printf("realloc(,0) failed\n");
  55. free(ptr);
  56. }
  57. }