You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过引用传递void指针并修改其指向为NULL

解决方案

要实现用void*作为函数参数,同时在函数内部修改原指针变量的值(比如设为NULL),本质还是要借助传递指针变量的地址来实现,只是需要对类型做强制转换适配void*参数。

修改后的代码

#include <stdio.h>
#include <unistd.h>
#include <sys/mman.h>

void myFree(void* freeMemoryPointer){
    // 将void*转回void**,直接操作原指针变量的内存
    *(void**)freeMemoryPointer = NULL;
}

int main(){
    void *memory1 = mmap(NULL, getpagesize() , PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0);
    printf("\nCurrent pointer: %p\n", memory1);
    // 传入指针变量的地址,强制转为void*类型
    myFree((void*)&memory1);
    printf("\nShould show null: %p\n", memory1);
}

原理说明

  • C语言是值传递,如果直接传memory1,函数里拿到的只是原指针的副本,修改副本不会影响外部的原变量。
  • 把&memory1(原指针变量的地址)强制转为void*传入函数,函数内部再将这个void*转回void**,此时解引用就能直接修改原指针变量的内存值,从而将其设为NULL。

注意事项

  • 必须确保传入myFree的是指针变量的地址,如果传入普通变量的地址或无效内存地址,会触发未定义行为,导致程序崩溃或异常。

内容的提问来源于stack exchange,提问作者George

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 23:35:41