首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于栈内存的小疑点

2012-02-14 
关于栈内存的小问题char*Func1(void){charstr[]“helloworld”//str的内存位于栈上...returnstr//将导致

关于栈内存的小问题
char   *   Func1(void)
{
char   str[]   =   “hello   world”;   //   str   的内存位于栈上
...
return   str;   //   将导致错误
}

CString   Func2(void)
{
CString   str   =   "hello   world ";
...
return   str;
}

  Func1   和   Func2   有什么区别?不都是栈内存吗?

[解决办法]
因为func2返回的是一个对象,这个对象拥有一个字符串
func1返回的是一个指针,指针所指向的内容已经无效了
[解决办法]
呃,CString其实一个指针,指向了堆内存,还正确实现了深拷贝。
[解决办法]
两个的临时变量在退出函数时都被释放了。只不过第一个还是在原地址访问,当然出错;而第二个是把原来的内容拷贝到另外一个地方去了,所以你还能访问。
[解决办法]
返回值返回的是返回内容的拷贝

你返回指针, 返回的时候把指针拷贝一下返回给你,指针的拷贝还是一个指针, 和没被拷贝的指针变量指向的是同一个东西, 都是指向栈中的那块地址, 当出了函数之后, 就会发生访问没有的东西, 当然出错了

如果你返回的不是指针而是一个实在的对象,返回值也会把你return的东西拷贝一下返回出函数栈空间, 此时,这个拷贝的东西就是你需要要的东西了, 他不会再去栈中查找内存数据

热点排行