C++的new和delete的问题

qiutuanyang 2018-02-07 10:00:35
请教一下各位,我用C++写了图中这一段代码。就是声明两个char *,然后将第一个赋给第二个。然后当我直接将指针pc1
赋给pc2,然后delete掉pc2,结果报错了,大概意思是不能delete掉栈上的内存,这个我能理解。但是我用strcpy_s这个函数
之后,在delete掉就没有问题。所以我想问一下,这两种操作,不都是直接把指针赋给另一个吗?为什么会存在一个可以delete而另一个不可以的情况?

...全文
799 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
wdpforinter 2018-06-20
  • 打赏
  • 举报
回复
执行 pc2=pc1; 之后 pc2保存的是pc1的地址 不能delete。 原来pc2保存的new的内存泄漏。
JackyRao 2018-06-16
  • 打赏
  • 举报
回复
strcpy_t 是深度Copy, 是复制内容, 你直接复制的方式本身就是有问题的,pc2的老的内容(new出来的)内存没办法释放, 会产生内存溢出
程序员菜鸟 2018-02-09
  • 打赏
  • 举报
回复
=和strcpy函数两个作用不一样
cyp_0413 2018-02-09
  • 打赏
  • 举报
回复
p2指向p1所指的字符串"12345"后,自身所申请的大小为10的空间就没有指针所指向了,系统无法delete掉那个空间,所以会报错。此外"12345"是const类型的无法delete,两个原因导致报错。
mdcire 2018-02-09
  • 打赏
  • 举报
回复
LZ要明白=好strcpy区别,指针赋值修改的指针本身内容,delete栈上指针会报错。strcpy修改指针所指向的内容,指针本身不变,delete还是堆的指针,所以可以。
鄢老 2018-02-09
  • 打赏
  • 举报
回复
数组越界: pc1长度6,pc2长度10,要从pc1中拷贝10个字符到pc2中,能不崩溃吗?
ps阿Sa 2018-02-09
  • 打赏
  • 举报
回复
另一个又不是new出来的,只需要释放new出来的就可以了
yshuise 2018-02-08
  • 打赏
  • 举报
回复
pc2=pc1只是让pc2指向pc1,内存泄漏了pc2原来那个内存泄漏了
赵4老师 2018-02-08
  • 打赏
  • 举报
回复
http://edu.csdn.net/course/detail/2344 C语言指针与汇编内存地址-一.代码要素
LandyTan 2018-02-08
  • 打赏
  • 举报
回复
pc1指向的地址是静态区,当然不能delete了。pc2指向的是堆区,自然就可以delete。你可以看下内存四区的介绍。
xiaohuh421 2018-02-08
  • 打赏
  • 举报
回复
pc2 = pc1 ; 是指针本身的地址值的赋值. 当相于这两个指针都指向了"abcde"所在的地址. 因为这个地址是常量区, 不能被delete. 所以会报错. 而strcpy_s是把 pc1指向的字符串内容复制到pc2中. 而pc1的仍然指向的"abcde"所在地址, pc2也仍然指向new出来的地址. pc1与pc2本身的地址值都没有变化, 所以delete正常
啊哈moment 2018-02-08
  • 打赏
  • 举报
回复

没报错啊
zhaozuqian 2018-02-08
  • 打赏
  • 举报
回复
萌新 因为 char* pc1 = "abcde"; 中pc1指向的是一个常量,无法delete
mstlq 2018-02-07
  • 打赏
  • 举报
回复
strcpy_s并不是直接把指针赋给另一个 参考https://msdn.microsoft.com/zh-cn/library/td1esda9.aspx

64,318

社区成员

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

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