1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
|
# include "bool.h"
/*@only@*/ /*@null@*/ int *p;
extern /*@truenull@*/ bool isNull (/*@null@*/ int *p);
void f (void)
{
if (p != NULL) return;
else
{
p = malloc (24);
if (p == NULL) exit (EXIT_FAILURE);
*p = 3;
}
}
void f1 (void)
{
if (p != NULL) return;
p = malloc (24);
if (p == NULL) exit (EXIT_FAILURE);
*p = 3;
}
int f2 (void)
{
if (p == NULL) return 0;
return *p;
}
int f3 (void)
{
if (isNull(p)) return 0;
return *p;
}
void g (void)
{
if (p == NULL) return;
p = malloc (24); /* 1. Only storage p not released before assignment */
if (p == NULL) exit (EXIT_FAILURE);
*p = 3;
}
|