我想将void*
作为函数参数,然后在函数内部修改该指针(将其更改为NULL
)。
下面的代码在函数调用后没有将memory1
更改为null
。我该如何更改呢?
#include <stdio.h>
#include <unistd.h>
#include <sys/mman.h>
void myFree(void**freeMemoryPointer){
/*some code*/
*freeMemoryPointer=NULL;
}
int main(){
void *memory1 = mmap(NULL, getpagesize() , PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0);//example
printf("\nCurrent pointer: %p\n", memory1);
myFree(memory1);
printf("\nShould show null: %p\n", memory1);
}
我也试过这个方法,效果很好:
myFree((void*)&memory1);
但是,我需要将void*
设置为函数参数,而不是(void*)&void*
。
2条答案
按热度按时间ubof19bj1#
正如问题所陈述的,这在C中是不可能的。
传递指针
memory1
的值传递了指针的一个副本,函数可以使用它来访问memory1
所指向的任何东西,但是它无法改变memory1
本身,为此,函数需要一个指向memory1
的指针,即&memory1
。bfrts1fy2#
您可以将指针传递给指针以修改它。
在C和C++中编译而不发出警告并正确执行(https://godbolt.org/z/fPxfY1YEPhttps://godbolt.org/z/8razoT9MT)