社区
C++ 语言
帖子详情
关于返回指向局部变量(对象)指针问题
dengfei007
2009-05-19 09:37:37
int *fun(...)
{
int *q=NULL;
return q;
}
我知道不要返回指向局部变量(对象)指针,因为一旦函数结束,局部对象(变量)被释放,返回的指针就变成了野指针了
但是我今天看了个资料有段代码的形式是这样的,它临时指针指向了NULL,这样可以吗??(这本书不一定说的对 因为我前面看这本书的时候都看出来有错误了)
...全文
135
11
打赏
收藏
关于返回指向局部变量(对象)指针问题
int *fun(...) { int *q=NULL; return q; } 我知道不要返回指向局部变量(对象)指针,因为一旦函数结束,局部对象(变量)被释放,返回的指针就变成了野指针了 但是我今天看了个资料有段代码的形式是这样的,它临时指针指向了NULL,这样可以吗??(这本书不一定说的对 因为我前面看这本书的时候都看出来有错误了)
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ztenv
版主
2009-05-19
打赏
举报
回复
不是谦虚,是初学C++,以前都是搞delphi和.net,刚刚看了一半的<C++ Primer>,所以感觉基础不扎实,还有必要加强;
taodm
2009-05-19
打赏
举报
回复
既然怀疑书不好,何不换本好点的书。
liuka
2009-05-19
打赏
举报
回复
[Quote=引用 5 楼 lianshaohua 的回复:]
int *fun(...)
{
int *q=NULL;
return q;
} 返回的是q,为什么不能用呢?当然可以用了,只是返回的时候,局部的q会被释放掉,会生成一个新的q返回到主函数中
int *fun(...)
{
int a=0;
return &a;//返回的是局部变量a的地址,当fun()结束的时候,是不能用的,因为a不存在了,而指向a的地址也是非法的了;
}
还望高手指教!
[/Quote]
int a = 0;//0在常量区,能返回正确的结果吧?
liuka
2009-05-19
打赏
举报
回复
应该是不能返回 栈内存 指针
char *test()
{
char a[] = "test";
return a;//error
}
chenzhp
2009-05-19
打赏
举报
回复
[Quote=引用 1 楼 arong1234 的回复:]
人家说不能返回“局部变量的指针”,不是“局部变量自己”
你只有返回&q才是返回q的指针,返回q是返回“局部变量自己”,不是“局部变量的指针”
[/Quote]
精辟
arong1234
2009-05-19
打赏
举报
回复
过分谦虚就是骄傲啊,你说的本来就对,何必要高手指教:)
[Quote=引用 5 楼 lianshaohua 的回复:]
int *fun(...)
{
int *q=NULL;
return q;
} 返回的是q,为什么不能用呢?当然可以用了,只是返回的时候,局部的q会被释放掉,会生成一个新的q返回到主函数中
int *fun(...)
{
int a=0;
return &a;//返回的是局部变量a的地址,当fun()结束的时候,是不能用的,因为a不存在了,而指向a的地址也是非法的了;
}
还望高手指教!
[/Quote]
ztenv
版主
2009-05-19
打赏
举报
回复
int *fun(...)
{
int *q=NULL;
return q;
} 返回的是q,为什么不能用呢?当然可以用了,只是返回的时候,局部的q会被释放掉,会生成一个新的q返回到主函数中
int *fun(...)
{
int a=0;
return &a;//返回的是局部变量a的地址,当fun()结束的时候,是不能用的,因为a不存在了,而指向a的地址也是非法的了;
}
还望高手指教!
Jalien
2009-05-19
打赏
举报
回复
顶![Quote=引用 1 楼 arong1234 的回复:]
人家说不能返回“局部变量的指针”,不是“局部变量自己”
你只有返回&q才是返回q的指针,返回q是返回“局部变量自己”,不是“局部变量的指针”
[/Quote]
findcsdn
2009-05-19
打赏
举报
回复
int *fun(...)
{
int *q=NULL;
return q;
}
就是 return NULL;
lori227
2009-05-19
打赏
举报
回复
可以~~~只是返回的指针不能用而已~
arong1234
2009-05-19
打赏
举报
回复
人家说不能返回“局部变量的指针”,不是“局部变量自己”
你只有返回&q才是返回q的指针,返回q是返回“局部变量自己”,不是“局部变量的指针”
返回
指向
局部变量
的
指针
或引用
返回
局部变量
没
问题
如果
返回
局部变量
有
问题
,函数的意义还有吗? 全局变量还用
返回
吗?
返回
指向
局部变量
的
指针
才有
问题
, 函数退栈之后,
局部变量
消失,
指针
将
指向
未知区域,所以出现
问题
。
返回
局部变量
的引用也是绝对不可以的。 引用只是变量的一个别名,变量本体都不存在了,引用当然也没有任何意义。 还有,如果是堆空间,可以
返回
,即在函数中用new申请的空间,是可以
返回
的。
返回
指向
局部变量
的
指针
或引用的
问题
一般的来说,函数是可以
返回
局部变量
的。
局部变量
的作用域只在函数内部,在函数
返回
后,
局部变量
的内存已经释放了。因此,如果函数
返回
的是
局部变量
的值,不涉及地址,程序不会出错。但是如果
返回
的是
局部变量
的地址(
指针
)的话,程序运行后会出错。因为函数只是把
指针
复制后
返回
了,但是
指针
指向
的内容已经被释放了,这样
指针
指向
的内容就是不可预料的内容,调用就会出错。准确的来说,函数不能通过
返回
指向
栈内存的
指针
(注意
返回
指向
局部变量
的
指针
或引用的带来的
问题
讨论
返回
局部变量
没
问题
如果
返回
局部变量
有
问题
,函数的意义还有吗? 全局变量还用
返回
吗?
返回
指向
局部变量
的
指针
才有
问题
, 函数退栈之后,
局部变量
消失,
指针
将
指向
未知区域,所以出现
问题
。
返回
局部变量
的引用也是绝对不可以的。 引用只是变量的一个别名,变量本体都不存在了,引用当然也没有任何意义。 还有,如果是堆空间,可以
返回
,即在函数中用new申请的空间,是可以返
函数
返回
局部变量
的
指针
或引用
一般来说,由于在离开函数后
局部变量
会被释放,所以是不允许函数
返回
指向
局部变量
的
指针
或引用的。我们往往需要遵循如下原则:引用作为
返回
值,必须遵守以下规则:(1)不能
返回
局部变量
的引用。主要原因是
局部变量
会在函数
返回
后被销毁,因此被
返回
的引用就成为了"无所指"的引用,程序会进入未知状态。(2)不能
返回
函数内部new分配的内存的引用。虽然不存在
局部变量
的被动销毁
问题
,可对于这种情况(
返回
函数内部new分...
函数
返回
局部变量
/局部
指针
c语言
返回
局部变量
局部
指针
局部数组 内存四区模型 讨论这个
问题
之前,一定要理解堆区和栈区的工作原理,数据的存储区域(参考内存四区模型),另外一定不要
返回
局部
对象
或变量的引用和
指针
。
局部变量
局部变量
分局部自动变量和局部静态变量,由于c
返回
的是值,因此
返回
一个
局部变量
是可以的,无论自动还是静态,因为这时候
返回
的是这个
局部变量
的值。另外,函数
返回
局部变量
时实际上是
返回
变量值...
C++ 语言
65,186
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章