realloc でメモリを拡張すると、新しいメモリが今までと
違うメモリブロックに確保された時に以前に取得していた
ポインタが無効になってしまうのですが、それを

int* p = malloc(10 * sizeof(int));
int* hoge = &p[5];

int* newP = realloc(p, 100 * sizeof(int));
if (newP != p) {
    hoge += newP - p;
}

と hoge を補正しても大丈夫でしょうか?