В C аргументы функций передаются по значению. Таким образом, копия сделана из вашего аргумента, и изменение сделано для этой копии, а не фактический указатель, который вы ожидаете увидеть измененным. Вам нужно будет изменить свою функцию, чтобы принять аргумент двойного указателя и внести изменение в аргумент разыменования, если вы хотите это сделать. Например,
void foo(int** p) {
*p = 0; /* set pointer to null */
}
void foo2(int* p) {
p = 0; /* makes copy of p and copy is set to null*/
}
int main() {
int* k;
foo2(k); /* k unchanged */
foo(&k); /* NOW k == 0 */
}
Если у вас есть возможность использовать C ++, альтернативный способ заключается в том, чтобы изменить функцию, чтобы принять ссылку на указатель.