1 /* For a long time (from Valgrind 1.0 to 1.9.6, AFAICT) when realloc() was 2 called and made a block smaller, or didn't change its size, the 3 ExeContext of the block was not updated; therefore any errors that 4 referred to it would state that it was allocated not by the realloc(), 5 but by the previous malloc() or whatever. While this is true in one 6 sense, it is misleading and not what you'd expect. This test 7 demonstrates this -- 'x' and 'y' are unchanged and shrunk, and their 8 ExeContexts should be updated upon their realloc(). I hope that's clear. 9 */ 10 #include <stdlib.h> 11 12 int main(void) 13 { 14 int* x = malloc(5); 15 int* y = malloc(10); 16 int* z = malloc(2); 17 int a, b, c; 18 19 x = realloc(x, 5); // same size 20 y = realloc(y, 5); // make smaller 21 z = realloc(z, 5); // make bigger 22 23 a = (x[5] == 0xdeadbeef ? 1 : 0); 24 b = (y[5] == 0xdeadbeef ? 1 : 0); 25 c = (z[5] == 0xdeadbeef ? 1 : 0); 26 27 return a + b + c; 28 } 29