If realloc is used to shrink a chunk of allocated storage, is it guaranteed by the standard that the storage won't be moved? I couldn't find any positive or negative statement about the matter. I.e., after char *p, *q; q = p = (char *) malloc(10); (void) realloc(p,5); is it valid to dereference q?