函数返回指针是返回原始地址,还是副本地址?

随风遁隐 2014-08-15 10:13:08
问题是这样的,我在一个函数中返回一个指针,返回的是原始地址还是副本地址?下面是调试的截图:

这是我返回new出来的地址,

std::string result="123";
char * x = new char[result.length() + 1];
strcpy_s(x,result.length()+1,result.c_str());
std::cout <<"分配的内存地址:"<< &x << std::endl;
return x;

从调试中看返回的是副本地址,而不是原始地址这样的话就无法在调用函数中释放new的内存了。
但是如果返回的是副本地址的话,那没应该可以直接返回函数内的变量。因为返回副本所以变量销毁了也应该没问题。。
看截图

代码:

std::string result="123";
return result.c_str();

结果发现返回的是原始地址。。
那到底是返回原始地址内还是副本地址呢?
...全文
417 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2014-08-15
  • 打赏
  • 举报
回复
引用 7 楼 kinwyb 的回复:
[quote=引用 6 楼 zhao4zhong1 的回复:] 啥叫“堆区”
基本明白! new初代的数据是放在堆区的,程序运行期间需要手动释放。。 我就想问,如何释放dll函数中new出来的内存。。问题里我忘了说,被调用的函数在DLL里面[/quote] 让dll导出一个函数供调用方调用,该函数的功能为delete函数参数指定的之前由dll其它函数中new出来的内存。
随风遁隐 2014-08-15
  • 打赏
  • 举报
回复
引用 6 楼 zhao4zhong1 的回复:
啥叫“堆区”
基本明白! new初代的数据是放在堆区的,程序运行期间需要手动释放。。 我就想问,如何释放dll函数中new出来的内存。。问题里我忘了说,被调用的函数在DLL里面
赵4老师 2014-08-15
  • 打赏
  • 举报
回复
啥叫“堆区”
赵4老师 2014-08-15
  • 打赏
  • 举报
回复
弄懂啥叫“常量区”
随风遁隐 2014-08-15
  • 打赏
  • 举报
回复
引用 3 楼 dbzhang800 的回复:
[quote=引用 2 楼 kinwyb 的回复:] [quote=引用 1 楼 dbzhang800 的回复:] 你去宾馆开了一个房间(new),然后服务员给你一个记录着门牌号的卡片(你所谓的原始地址)。然后你通过电话将其告诉你的朋友,朋友记录在纸上(你所谓的副本地址)
谢谢回答,你这比喻很有意思! 那我应该如何来释放new出来的内存呢? [/quote] 你朋友直接根据他记录的门牌号退房即可(delete)[/quote] 我一开始就是这么操作的,delete返回的指针。。运行错误! 忘了说了。引用的函数是在动态库dll里面。。
dbzhang800 2014-08-15
  • 打赏
  • 举报
回复
引用 2 楼 kinwyb 的回复:
[quote=引用 1 楼 dbzhang800 的回复:] 你去宾馆开了一个房间(new),然后服务员给你一个记录着门牌号的卡片(你所谓的原始地址)。然后你通过电话将其告诉你的朋友,朋友记录在纸上(你所谓的副本地址)
谢谢回答,你这比喻很有意思! 那我应该如何来释放new出来的内存呢? [/quote] 你朋友直接根据他记录的门牌号退房即可(delete)
随风遁隐 2014-08-15
  • 打赏
  • 举报
回复
引用 1 楼 dbzhang800 的回复:
你去宾馆开了一个房间(new),然后服务员给你一个记录着门牌号的卡片(你所谓的原始地址)。然后你通过电话将其告诉你的朋友,朋友记录在纸上(你所谓的副本地址)
谢谢回答,你这比喻很有意思! 那我应该如何来释放new出来的内存呢?
dbzhang800 2014-08-15
  • 打赏
  • 举报
回复
你去宾馆开了一个房间(new),然后服务员给你一个记录着门牌号的卡片(你所谓的原始地址)。然后你通过电话将其告诉你的朋友,朋友记录在纸上(你所谓的副本地址)
随风遁隐 2014-08-15
  • 打赏
  • 举报
回复
问题解决!就此结贴,谢谢!zhao4zhong1,dbzhang800

65,185

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧