Вы не можете обновить значение void**
(то есть на что оно указывает), передав его в функцию, которая принимает void**
.Это позволяет изменять только указанную память, а не адрес, на который указывает указатель, который вы передаете функции.
Чтобы обновить то, на что он указывает, параметр должен быть void**&
или void***
.
Независимо от того, какое решение вы выберете, код, который вы разместили, чрезвычайно подвержен ошибкам и чертовски хорош в обслуживании.Вам следует полностью избегать этого.
Также обратите внимание, что &tmp
становится недействительным, пока вы выходите из функции, потому что локальная переменная tmp
уничтожается.