防止本地指针

haa*_*ael 5 c pointers compiler-warnings

也许这是一个新手问题,但在C/C++中是否有一种方法可以阻止函数接受指向局部变量的指针?

考虑以下代码:

int* fun(void)
{
 int a;
 return &a;
}
Run Code Online (Sandbox Code Playgroud)

编译器将生成一个警告,指示无法返回指针.现在考虑一下:

int* g;

void save(int* a)
{
 g = a;
}

void bad(void)
{
 int a;
 save(&a);
}
Run Code Online (Sandbox Code Playgroud)

这将通过编译器而不会发出警告,这很糟糕.是否有某种属性或某些东西可以防止这种情况发生?就像这样:

void save(int __this_pointer_must_not_be_local__ * a)
{
 g = a;
}
Run Code Online (Sandbox Code Playgroud)

如果有人知道答案,请提前致谢

das*_*ght 0

不,没有可靠且可移植的方法来区分本地指针和堆对象指针。也没有办法以声明方式阻止这种情况。

有些黑客依赖于特定系统的内存布局,它们在运行时通过调用未指定的行为来工作(请参阅此答案以获取示例),但如果您决定尝试一下,您就得靠自己了。