1
2 #include <stdio.h>
3 #include <stdlib.h>
4 #include "../memcheck.h"
5
6 /* Program demonstrating copying of metadata in memcheck. */
7
main(void)8 int main ( void )
9 {
10 int* a = malloc(10 * sizeof(int));
11 int* b = malloc(10 * sizeof(int));
12 int* v = malloc(10 * sizeof(int));
13 int i, sum, res;
14
15 for (i = 0; i < 10; i++) {
16 if (i != 5)
17 a[i] = i;
18 }
19
20 /* a[0 .. 4] and [6 .. 9] are defined, [5] is undefined. */
21 for (i = 0; i < 10; i++)
22 b[i] = 0;
23
24 /* b[0 .. 9] is defined. */
25
26 /* Get metadata for a and put it in v. */
27 res = VALGRIND_GET_VBITS(a, v, 10*sizeof(int) );
28 printf("result of GET is %d (1 for success)\n", res);
29
30 for (i = 0; i < 10; i++)
31 printf("%d 0x%08x\n", i, v[i]);
32
33 /* and copy to b. */
34 res = VALGRIND_SET_VBITS(b, v, 10*sizeof(int) );
35 printf("result of SET is %d (1 for success)\n", res);
36
37 /* Now we should have that b[5] is undefined since a[5] is
38 undefined. */
39 sum = 100;
40 for (i = 0; i < 10; i++)
41 sum += b[i];
42
43 /* V should yelp at this point, that sum is undefined. */
44 if (sum == 0)
45 printf("sum == 0\n");
46 else
47 printf("sum != 0\n");
48
49 return 0;
50 }
51