我认为这两个函数都有问题,因为它们返回指向堆栈中分配的局部变量的引用/指针:
int &func1() {
int a = 3;
return a;
}
int *func2() {
int a = 3;
int *p = &a;
return p;
}
但是当我使用编译命令 g++ -Wall 时,为什么它只给出 func1 的警告而不给出 func2 的警告?是因为 func2 可以有意用于某种目的,还是可以通过添加其他参数来设置警告?我的 g++ 版本是 4.6.3,在 Ubuntu 12.04 上。
最佳答案
编译器无法知道您正在尝试如何处理 func2 中返回的指针。
您也可以返回数组的实例,例如:
int *func2() {
int a = 3;
int *p = &a;
/*some useful stuff*/
if (some_criteria)
p = new int[10];
return p;
}
因为编译器没有能力评估返回指针的语义。
关于c++ - 如何在 g++ 中设置警告以警告返回指向局部变量的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23583601/