c++ - 如何在 g++ 中设置警告以警告返回指向局部变量的指针?

标签 c++ g++ warnings

我认为这两个函数都有问题,因为它们返回指向堆栈中分配的局部变量的引用/指针:

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/

相关文章:

c++ - 为什么 Linux 上的 C++ 重整不是唯一的

c++ - 如何在没有 QLabel 的情况下在 Qt 中添加超链接?

c++ - 在 C/C++ 中求解非线性反抛物线 PDE 的包

c# - 将 C 字符串返回到 C# 程序

c++ - Linux g++编译错误: error: expected ',' or '...' before '||' token

gcc - 如何抑制 GCC 链接器警告?

c++ - 不可复制类型的整数可索引 RAII 容器

compiler-errors - 有些人在gcc中定义了编译成功,但是g++失败了

Perl 错误地提示 Name "main::FILE"只使用了一次

java - 参数 'foo' 不应该被赋值——有什么害处?