#include <stdio.h> #include <stdlib.h> #include "../memcheck.h" /* Program demonstrating copying of metadata in memcheck. */ int main ( void ) { int* a = malloc(10 * sizeof(int)); int* b = malloc(10 * sizeof(int)); int* v = malloc(10 * sizeof(int)); int i, sum, res; for (i = 0; i < 10; i++) { if (i != 5) a[i] = i; } /* a[0 .. 4] and [6 .. 9] are defined, [5] is undefined. */ for (i = 0; i < 10; i++) b[i] = 0; /* b[0 .. 9] is defined. */ /* Get metadata for a and put it in v. */ res = VALGRIND_GET_VBITS(a, v, 10*sizeof(int) ); printf("result of GET is %d (1 for success)\n", res); for (i = 0; i < 10; i++) printf("%d 0x%08x\n", i, v[i]); /* and copy to b. */ res = VALGRIND_SET_VBITS(b, v, 10*sizeof(int) ); printf("result of SET is %d (1 for success)\n", res); /* Now we should have that b[5] is undefined since a[5] is undefined. */ sum = 100; for (i = 0; i < 10; i++) sum += b[i]; /* V should yelp at this point, that sum is undefined. */ if (sum == 0) printf("sum == 0\n"); else printf("sum != 0\n"); return 0; }