在编译下面的代码片段(g ++ 4.6)时,我得到(预期的)警告消息:
./test.cpp:3:7: attention : address of local variable ‘ii’ returned [enabled by default].
int *get_ii()
{
int ii = 2;
return ⅈ
}
int main(int argc, char* argv[])
{
int *ii;
ii = get_ii();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
问题:是否有编译器选项允许我在编译时忽略此警告消息?
理由:这纯粹是出于教学目的.我想向观众展示这段代码并询问它有什么问题.这就是我想隐藏警告信息的原因,因为这是一个很大的线索.
Luc*_*ore 10
在gcc中没有办法(pragma warning在MSVS中),这是一个你不应该忽略的警告.
将函数local的地址返回给函数是未定义的行为.当get_ii返回时,变量ii不再存在,但你返回一个指针.如果你把它改成了
int *get_ii()
{
static int ii = 2;
return ⅈ
}
Run Code Online (Sandbox Code Playgroud)
它会解决问题和警告.
| 归档时间: |
|
| 查看次数: |
833 次 |
| 最近记录: |