#include <iostream>
#include <string>
#ifdef __linux
#include <stdio.h>
#endif
// 编译器真是相当友好啊warning C4172: returning address of local
// variable or temporary 一定不要返回局部变量啊
char* GetMemory(void)
{
char p[] = "hello world";
return p; // 这里是返回local的address
}
int get_int(void)
{
int i = 3;
return i; // 这是返回local的值,与上面是两回事,上面是说返回之后,用到这个地址返回值
} // 要用GetMemory这个函数里面的已经析构了的数据
// 而下面就涉及到get_int这个函数里面的local变量,因为别人只用这个int值
int main()
{
char *str = NULL;
// std::cout << *str; //不可以这样输出0么?
str = GetMemory();
printf(str);
std::cout << std::endl;
std::cout << get_int() << std::endl;
return 0;
}
DontReturnLocalAddress : DontReturnLocalAddress.cpp
g++ -g DontReturnLocalAddress.cpp -o DontReturnLocalAddress
clean:
rm DontReturnLocalAddress
![23 23](//images0.cnblogs.com/blog/405501/201501/290959431128748.jpg)