打印

指针问题

[复制链接]
913|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
baidudz|  楼主 | 2012-8-21 18:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
sd, ST, DDS, ps, TE
在函数中申明的局部变量是存放在栈中的,内存管理里面说不能返回栈里的指针.
比如
#include <iostream>
#include <string>

using namespace std;
char * test1()
{
char a[10] = "sddsds";
return a;
}


char * test2()
{
char * psz="sddsds";
return psz;
}
int main()
{
cout<<test1()<<endl;
cout<<test2()<<endl;
}

为什么test1返回是错的,而test2返回的是对的? 一直不太理解.

相关帖子

沙发
无冕之王| | 2012-8-21 18:33 | 只看该作者
首先你要理解,为什么不能返回指向栈内存的指针或引用。因为在函数返回后栈内存消亡,导致你指针所指的对象不存在,test2()中psz指向的常量存储区:"sddsds",所有并不会消亡;而test1中 char a[10] = "sddsds";其实相当于:a[0] = 's'.a[1] = 'd' ......并不是常量区,所有函数结束后会消亡。

使用特权

评论回复
板凳
txcy| | 2012-8-21 18:44 | 只看该作者
char * psz="sddsds";
char a[10] = "sddsds";
这两者存储的位置不一样
一个是在文字常量区,一个在栈上

使用特权

评论回复
地板
火箭球迷| | 2012-8-21 18:52 | 只看该作者
用malloc分配地址不会错

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

239

主题

2284

帖子

0

粉丝