| 1 | extern "C" { | 
|---|
| 2 | typedef long unsigned int size_t; | 
|---|
| 3 | void *malloc( size_t size ); | 
|---|
| 4 | void *calloc( size_t nmemb, size_t size ); | 
|---|
| 5 | void *realloc( void *ptr, size_t size ); | 
|---|
| 6 | void *memset( void *s, int c, size_t n ); | 
|---|
| 7 | void free( void * ptr ); | 
|---|
| 8 | int printf( const char *, ... ); | 
|---|
| 9 | } | 
|---|
| 10 |  | 
|---|
| 11 | forall( type T ) T * malloc( void ) { | 
|---|
| 12 | return (T *)malloc( sizeof(T) ); | 
|---|
| 13 | } | 
|---|
| 14 | forall( type T ) T * calloc( size_t size ) { | 
|---|
| 15 | return (T *)calloc( size, sizeof(T) ); | 
|---|
| 16 | } | 
|---|
| 17 | forall( type T ) T * realloc( T *ptr, size_t n ) { | 
|---|
| 18 | return (T *)(void *)realloc( ptr, sizeof(T) ); | 
|---|
| 19 | } | 
|---|
| 20 | forall( type T ) T * realloc( T *ptr, size_t n, T c ) { | 
|---|
| 21 | return (T *)realloc( ptr, n ); | 
|---|
| 22 | } | 
|---|
| 23 |  | 
|---|
| 24 | int *foo( int *p, int c ); | 
|---|
| 25 | int *bar( int *p, int c ); | 
|---|
| 26 | int *baz( int *p, int c ); | 
|---|
| 27 |  | 
|---|
| 28 | int main( void ) { | 
|---|
| 29 | size_t size = 10; | 
|---|
| 30 | int * x = malloc(); | 
|---|
| 31 | x = malloc(); | 
|---|
| 32 | x = calloc( 10 );                                   // calloc: array set to 0 | 
|---|
| 33 | x = realloc( x, 10 ); | 
|---|
| 34 | x = realloc( x, 10, '\0' ); | 
|---|
| 35 | x = malloc( 5 ); | 
|---|
| 36 | float *fp = malloc() + 1; | 
|---|
| 37 |  | 
|---|
| 38 | struct St1 { int x; double y; }; | 
|---|
| 39 | struct St1 * st1; | 
|---|
| 40 | double *y; | 
|---|
| 41 | x = realloc( st1, 10 );                             // SHOULD FAIL!! | 
|---|
| 42 | #if 0 | 
|---|
| 43 | int *p; | 
|---|
| 44 | p = foo( bar( baz( malloc(), 0 ), 0 ), 0 ); | 
|---|
| 45 | free( p ); | 
|---|
| 46 |  | 
|---|
| 47 | struct St2 { int x; double y; }; | 
|---|
| 48 | struct St2 * st2; | 
|---|
| 49 |  | 
|---|
| 50 | y = malloc(); | 
|---|
| 51 | st1 = malloc(); | 
|---|
| 52 | //    st1 = realloc( st2, 10, st1 ); | 
|---|
| 53 |  | 
|---|
| 54 | *y = 1.0; | 
|---|
| 55 | printf("%f\n", *y); | 
|---|
| 56 |  | 
|---|
| 57 | st1->x = *x + 1; | 
|---|
| 58 | st1->y = *y *1.5; | 
|---|
| 59 | printf("{ %d, %f }\n", st1->x, st1->y); | 
|---|
| 60 |  | 
|---|
| 61 | free( y ); | 
|---|
| 62 |  | 
|---|
| 63 | x = malloc( 10 ); | 
|---|
| 64 | for ( int i = 0; i < 10; i += 1 ) { | 
|---|
| 65 | x[i] = i * 10; | 
|---|
| 66 | } | 
|---|
| 67 | for ( int j = 0; j < 10; j += 1 ) { | 
|---|
| 68 | printf( "x[%d] = %d\n", j, x[j] ); | 
|---|
| 69 | } | 
|---|
| 70 | free( x ); | 
|---|
| 71 | #endif | 
|---|
| 72 | } | 
|---|