malloc.c 992 B

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