我有以下代码.
#include <iostream>
int * foo()
{
int a = 5;
return &a;
}
int main()
{
int* p = foo();
std::cout << *p;
*p = 8;
std::cout << *p;
}
Run Code Online (Sandbox Code Playgroud)
而代码只是运行而没有运行时异常!
输出是 58
怎么会这样?本地变量的内存不能在其功能之外无法访问吗?
我正在使用一些代码,这些代码广泛使用返回指向静态局部变量的指针的习惯用法.例如:
char* const GetString()
{
static char sTest[5];
strcpy(sTest, "Test");
return sTest;
}
Run Code Online (Sandbox Code Playgroud)
我认为这是安全的吗?
PS,我知道这是做同样事情的更好方法:
char* const GetString()
{
return "Test";
}
Run Code Online (Sandbox Code Playgroud)
编辑: 道歉,功能签名当然应该是:
const char* GetString();
Run Code Online (Sandbox Code Playgroud) 返回一个数组(警告:函数返回局部变量的地址)?
接口
int* decimalConversion(int iX);
Run Code Online (Sandbox Code Playgroud)
履行
int* decimalConversion(int iX){
int iMult[10] = {0,0,0,0,0,0,0};
...
return iMult; // <-- Warning: Function returns address of local variable
}
Run Code Online (Sandbox Code Playgroud)