社区
C++ 语言
帖子详情
这样写程序会不会产生内存问题??
guaiwei
2004-11-30 04:28:30
看到一系列源代码,通过一个函数来把整数转换成相应的字符串(这是一个函数),如下:
string toString(const int val)
{
char tmp[20];
snprintf(tmp,20,"%d",val);
return tmp;
}
然后在其他的地方调用toString函数,不知道这样会不会产生内存问题。
temp应该是局部变量,在函数完成后应该被释放,然后把指针返回,这样是不是很危险??
不太明白,请大侠们指教
...全文
94
13
打赏
收藏
这样写程序会不会产生内存问题??
看到一系列源代码,通过一个函数来把整数转换成相应的字符串(这是一个函数),如下: string toString(const int val) { char tmp[20]; snprintf(tmp,20,"%d",val); return tmp; } 然后在其他的地方调用toString函数,不知道这样会不会产生内存问题。 temp应该是局部变量,在函数完成后应该被释放,然后把指针返回,这样是不是很危险?? 不太明白,请大侠们指教
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
guaiwei
2004-12-01
打赏
举报
回复
谢谢大家的指点,小弟明白了,3x
SwordMan2001
2004-11-30
打赏
举报
回复
这样写是没有问题的.
我举两个例子你就明白了,
1.
char * toString(const int val)
{
char tmp[20];
snprintf(tmp,20,"%d",val);
return tmp;
}
返回char*型,即tmp本身. 这就是所谓的返回一个局部指针. 在函数完成后,tmp被释放了.
如果这时有:
char *str=toString(100);
下面对str的操作显示会引起内存问题.
2.
string toString(const int val)
{
char tmp[20];
string sTmp;
snprintf(tmp,20,"%d",val);
sTmp = string(tmp);
return sTmp;
}
有问题吗?没有. 这只是返回一个普通的变量(而非指针或引用),string的值被拷贝过去,然后所有的局部变量被释放.
楼主看到的toString函数只不过是写法2的一个简便写法而已.类似于
return string(tmp);
明白了吧
248406869
2004-11-30
打赏
举报
回复
回复人: healer_kx(天降甘草) ( ) 信誉:100 2004-11-30 17:04:00 得分: 0
都白话啥啊?
这样写完全正确。!!!
1, VC不烂,你不会用而已,那些warning级别都是可以调整的。
2,返回的是string,不是string&,return是有一个COPY动作的。而不会返回什么栈上的指针和引用。
char数组完全可以返回给string,有隐式“转化”的。
你见过的字符转太少了, BSTR,_bstr_t, 和 LPCTSTR之间的转化更有意思哦。
------------------------------------------------------------------------------------
vc还不烂,你知不知道vc6出来的时候C++标准还没出来,vc对c++标准支持的不好。
我给你写段程序你去编译看看vc6报不报错。
string toString(const int val)
{
char tmp[20];
sprintf(tmp,"%d",val);
return tmp;
}
void f(string &s){}
int main()
{
f(toString(5));
return 0;
}
连错都不报,你到dev c++上去试试肯定报错。
weixiaohua
2004-11-30
打赏
举报
回复
不会~!
函数调用完成tmp占有的内存就自动释放了.
healer_kx
2004-11-30
打赏
举报
回复
都白话啥啊?
这样写完全正确。!!!
1, VC不烂,你不会用而已,那些warning级别都是可以调整的。
2,返回的是string,不是string&,return是有一个COPY动作的。而不会返回什么栈上的指针和引用。
char数组完全可以返回给string,有隐式“转化”的。
你见过的字符转太少了, BSTR,_bstr_t, 和 LPCTSTR之间的转化更有意思哦。
daidodo
2004-11-30
打赏
举报
回复
想错了。由于string有构造函数string(char *),所以返回tmp的时候实际上生成了一个string,这个是全局的,所以即使tmp释放了,程序仍可以工作。
248406869
2004-11-30
打赏
举报
回复
不过你最好还是写成const string toString(const int val),因为你返回的是临时对象。当然不写const也没关系临时对象被看成是const,编译器会给你报错,但你如果用了vc这样的烂编译器,那结果可就......
DiabloWalkOnTheEarth
2004-11-30
打赏
举报
回复
不会.
daidodo
2004-11-30
打赏
举报
回复
我觉的你的程序有问题:
string toString(const int val)是string 型的,而tmp是char * 型的,你确认可以return?
yevv
2004-11-30
打赏
举报
回复
刚才不是问了一次了吗 肯定会阿 你在主调函数里引用这个返回值时候就会出问题
248406869
2004-11-30
打赏
举报
回复
不会
candyseason
2004-11-30
打赏
举报
回复
觉得不会
编程可以这样学
《编程可以这样学》提出一种全新的学习理念,在我们去窥探各种语言或技术的细枝末节之前,老张
会
带着大家先去
程序
员的世界里遨游一圈:C语言只是用来
写
黑底白字的控制台
程序
吗?算法在游戏开发中有什么用?学校开设的计算机相关课程在实际开发中如何联系在一起?五花八门的语言或技术都在怎样的情形下派上用场?遇到
问题
该去查阅哪一方面的书籍……
微信小
程序
超级占
内存
_实测:微信小
程序
究竟
会
占用多少
内存
?结果竟然
上图就是小编微信中已经安装的小
程序
列表、微信占用的
内存
空间数据。接下来小编安装两个小
程序
。上图就是安装小
程序
之后的结果,可以看出,安装
程序
对
内存
空间影响几乎没有。(可能是极小,小到可以忽略不计。)结论:安装小
程序
几乎
不
会
占用
内存
空间。下面在测试使用小
程序
的结果,为了能明显的体现出数据的变化,小编选择观看视频和收听电台作为测试主体。(因为在此期间
会
产生
大量的缓存文件)看了一集电视剧之后......听...
微信小
程序
超级占
内存
_小
程序
丨微信小
程序
占
内存
大吗?微信小
程序
消耗流量大吗?...
微信小
程序
占
内存
怎么样?微信小
程序
内存
占用
会
不
会
过大?微信小
程序
消耗流量大吗?是否感觉微信小
程序
消耗流量非常快啊?近日小
程序
逐渐开放8个入口,许多新用户初次接触了小
程序
,他们
会
因为担心微信小
程序
耗流量太大,微信小
程序
占
内存
太多之类的
问题
而驻足观望吗?今天,第九
程序
在这里将为你解答此类困惑,不妨一起来看看吧。微信小
程序
消耗流量大吗?首先,小
程序
是网页,小
程序
是网页,小
程序
是网页。重要的事说三遍。它不...
什么是
内存
泄漏 ? 什么原因
产生
的? 如何解决?
内存
泄露是指:
内存
泄漏也称作"存储渗漏",用动态存储分配函数动态开辟的空间,在使 用完毕后未释放,结果导致一直占据该
内存
单元。直到
程序
结束。(其实说白了就是该
内存
空间 使用完毕之后未回收)即所谓
内存
泄漏。...
内存
越界一定
会
导致
程序
崩溃吗?详解
内存
越界
本文详细解释了
内存
越界不一定导致
内存
越界的
问题
,全面介绍了C++
内存
越界的相关内容。
C++ 语言
64,654
社区成员
250,484
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章