Почему ptr1 следует за ptr2?
Если вы хотите, чтобы ptr1 имел тот же адрес, что и ptr2, вы должны установить его в ptr2:
ptr1 = ptr2;
В вашем посте ptr1 все еще указывает на NULL. Так что вам нужно явно указать это, чтобы указать на ptr2.
Рисование картинок делает все более понятным, так что пойдите:
альтернативный текст http://img705.imageshack.us/img705/2433/pointers.png
Прямо сейчас у вас есть 2 указателя, указывающие на некоторые данные или нет данных (NULL). Если вы хотите, чтобы указатель следовал за другим указателем, вам нужен указатель на указатель (2 звездочки), а не просто указатель (1 звездочка).
void** ptr1 = (void**) &ptr2;