【发布时间】:2012-06-13 04:34:30
【问题描述】:
也许这是一个新手问题,但是 C/C++ 中有没有一种方法可以防止函数接受指向局部变量的指针?
考虑这段代码:
int* fun(void)
{
int a;
return &a;
}
编译器会产生一个指针不能返回的警告。现在考虑一下:
int* g;
void save(int* a)
{
g = a;
}
void bad(void)
{
int a;
save(&a);
}
这将在没有警告的情况下通过编译器,这很糟糕。是否有属性或东西可以防止这种情况发生? IE。类似:
void save(int __this_pointer_must_not_be_local__ * a)
{
g = a;
}
如果有人知道答案,请提前感谢。
【问题讨论】:
-
代码审查? ...代码分析器,例如 lint?
-
代码审查,静态分析。您所要求的实际上非常非常复杂。
-
如果我想做
void f() { int b; save(&b); /* do stuff */ save(NULL); }怎么办?变量是“本地”的事实并不一定很重要。这也会很糟糕。int* p = new int(); save(p); delete p; -
@CharlesBailey:有很多不好的地方; OP 正在询问一个特定的问题,编译器似乎已经能够识别它(用于警告返回本地指针的逻辑)。
-
@ScottHunter:我的意思是存储指向本地对象的指针不一定是坏事。将其标记为错误会产生误报。
标签: c pointers compiler-warnings