All pastes #1185948 Raw Edit

Stuff

public c v1 · immutable
#1185948 ·published 2008-08-27 02:39 UTC
rendered paste body
#include <stdio.h>#include <stdlib.h>#include <assert.h>#include <string.h>#include <errno.h>/* Singly linked list with a pointer to the next element and a pointer to a value. */struct _list{    struct _list *next;    void         *val;};typedef struct _list list;void *mem_get( size_t size ){    /* Allocate a given chunk of memory to a pointer that is returned. */    void *pt;    assert( size > 0 );    if ( ( pt = malloc( size ) ) == NULL )    {        fprintf( stderr, "ERROR: Could not allocate %zu byte(s): %s\n", size, strerror( errno ) );        abort();    }     return pt;}void mem_free( void *pt ){    /* Free memory from a given pointer. */    void **ppt = ( void ** ) pt;    void  *p   = *ppt;    if ( p != NULL )    {        free( p );        p = NULL;    }    *ppt = NULL;}void list_add( list **list_ppt, void *val ){    /* Add a new singly linked list element with a pointer. */    list *list_pt = *list_ppt;    list *new     = NULL;    new = mem_get( sizeof( list ) );    new->val  = val;    new->next = list_pt;    *list_ppt = new;}int main(){    int   i     = 0;    list *new   = NULL;    list  *next = NULL;    list  *elem = NULL;//    This test works nicely//    char *test  = NULL;////    test = mem_get( 100000000 );////    mem_free( &test );////    while( 1 )//        ;    fprintf( stderr, "Adding ...\n" );    for ( i = 0; i < 10000000; i++ ) {        list_add( &new, "TEST" );    }    fprintf( stderr, "Freeing ...\n" );    next = new;    while ( next != NULL )    {        elem = next;        next = elem->next;        mem_free( &elem );    }    fprintf( stderr, "Done\n" );    while( 1 )        ;    return EXIT_SUCCESS;}