Listing 1 Error by Reading a Freed Pointer

#include <stdlib.h>
#include <assert.h>

void    main() {
int     *ip;
int     n;

       /* allocate an integer */
       ip = malloc(sizeof(int));
       assert(ip != NULL);

       /* initialize the integer */
       (*ip) = 1;
       
       /* deallocate the integer */
       free(ip);

       /* use the deallocated integer */
       n = 3 * (*ip);
       printf("n may or may not equal 3 (n == %d)\n",n);
}
/* End of File */