64,654
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
class A
{
public :
char * test();
private:
char *m;
};
char * A::test()
{
m = "1234567890";
}
char * test()
{
char *m = "0987654321";
}
void main()
{
A a;
char * m = a.test();
std::cout << m; //函数生命周期结束了,栈区数据怎么还在,我靠,没出问题? 以前一直用智能指针,没在意这个,今天看代码发现这么个问题;
m = test(); //函数生命周期结束了,栈区数据怎么还在,我靠,没出问题? 以前一直用智能指针,没在意这个,今天看代码发现这么个问题;
std::cout <<m;
}
12: m = "1234567890";
0040116D mov eax,dword ptr [ebp-4]
00401170 mov dword ptr [eax],offset string "1234567890" (0043201c)
18: char *m = "0987654321";
004011A8 mov dword ptr [ebp-4],offset string "0987654321" (0043202c)
返回的是内存中的这两个地址:
0043202c
0043201c
只要内存中这两个地址中的内容没有销毁,那么,这个值就一直可以用。