对于局部变量的静态指针是否有g ++警告?

时间:2014-01-22 06:04:46

标签: c++ g++ warnings compiler-warnings

我在这种形式的代码中看到了一个有趣的错误:

#include <iostream>

char * some_function(void)
{
    char local_string[] = "Hello, world!";
    static char * static_pointer = local_string;    // Here is the bug

    std::cout << static_pointer << std::endl;

    return local_string;    // Here is a related bug
}

void function_nest(void)
{
    int i = 5;
    // std::cout << i << std::endl;
    some_function();
}

int main(int argc, char ** argv)
{
    some_function();
    function_nest();
    some_function();
}

第一次调用此函数时,*static_pointer的值是明确定义的(它是指向“Hello,world!”的指针)。但是在后续调用中,指针没有意义,因为它指向第一次调用的局部变量(可能是在堆栈上)。

如果我使用g++进行编译,那么它就会给我一个警告,就像我期望的那样:

static-pointer-bug2.cpp:6:10: warning: address of local variable ‘local_string’ returned [enabled by default]

但它没有给static_pointer初始化local_string的任何警告。这是一类错误。

当我运行它(Ubuntu 13.04 64位Intel PC)时,我得到:

Hello, world!
�ˤ��
Hello, world!

(我想我第三次幸运。)

是否有任何g++警告可以启用以捕获此信息?

0 个答案:

没有答案