| 12
 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
 
 | # include <stdio.h>
# include <strings.h>
# include <stdlib.h>
# include <assert.h>
typedef struct
{
  int x;
  char *name;
} record;
record copyrecord (record x)
{
  record copy = x;
  return copy; /* 1. Released storage x.name reachable from parameter at ... */
}
record copyrecord2 (record x)
{
  record copy;
  copy = x;
  return copy; /* 2. Released storage x.name reachable from parameter at ... */
}
record copyrecord3 (record x)
{
  return x; /* 3. Released storage x.name reachable from parameter at ... */
}
int main ()
{
  record r;
  record rc;
  r.x = 3;
  r.name = (char *) malloc (sizeof (char) * 100);
  assert (r.name != NULL);
  strcpy (r.name, "yo");
  rc = r;
  printf ("rc: %s", rc.name);
  return r.x; /* 4. Only storage rc.name (type char *) derived from variable ... */
}
 |