2 qq 35640156 qq_35640156 于 2016.09.25 15:40 提问

C++不同函数内delete的问题
c++

在函数point中用new分配了一个动态字符数组,返回指向这个数组的指针,然后在main函数中赋给指针name,那怎么样在使用完name后用delete删除这个动态空间呢?图片图片

10个回答

wind612
wind612   2016.09.30 09:27
已采纳

首先这种写法也是没有问题的,系统自己的API都有这种类似的调用,比如编码转换函数MultiByteToWideChar(), 就需要在外部释放空间。
对于数组的释放应该选用delete[],希望对你有帮助。

qq_35640156
qq_35640156 感谢~
大约一年之前 回复
u011491972
u011491972   2016.09.25 19:36
  1. main() 括号没有写;
  2. 没有使用new申请, 自己定义的name指针是系统分配的,在栈上,不需要释放;
  3. new 与 delete 成对出现;
  4. mian() 和 point() 函数里的 指针不是同一个,函数内部的变化不能直接返回,应该使用**二级指针;
u011491972
u011491972 回复qq_35640156: 变量的生存区域限制,你使用一级指针是传不回去的
大约一年之前 回复
qq_35640156
qq_35640156 不能直接返回一个指针吗?
大约一年之前 回复
u011491972
u011491972 main() 和 point() 函数里的 指针不是同一个,函数内部的变化不能直接返回,应该使用**二级指针;
大约一年之前 回复
qq_35640156
qq_35640156   2016.09.25 15:43

尼玛这图片是怎么上去的,请大家忽视第一张图。

u013456079
u013456079   2016.09.25 16:03

先说一下delete。delete关键字操作之后,只是告诉内核回收这片内存。但是new出来的堆区指针存在,还是指向这片内存区。但是这片内存区有可能在程序运行期间,被其他数据占用,那么这时这块数据区相对于原来来说,已经是垃圾数据。
这个问题可以直接在主函数内完成。但是一般不会这么做,会有专门的回收机制。要么就是运行结束,会自动释放

u013456079
u013456079 回复qq_35640156: 可以
大约一年之前 回复
qq_35640156
qq_35640156 就是说不用在主函数中使用delete释放内存是吗?
大约一年之前 回复
lx624909677
lx624909677   Ds   Rxr 2016.09.25 16:59

函数的传入就传入引用,然后main函数里面去delete

junbujianwpl
junbujianwpl   2016.09.25 18:36

char* name = point();//干嘛还在point()之前加char* 返回值 已经是char* 不需要强制类型转换
delete name;//delete[] name; 二者都可以。用delete name比较合适

qq_35640156
qq_35640156 是在主函数里新声明一个指针name,然后初始化为函数point的返回值
大约一年之前 回复
leewers
leewers   2016.09.25 22:21

一般来说new对应delete,new []对应delte [],因为代码中使用了char* ps = new char[10]; 所以用delete[] name会更合适一点,但由于基本类型数组两个可以混用,不过还是不推荐这样用,因为类对象数组只能用delete对应new,delte[]对应new[],还是养成良好的编程习惯比较好

robin8624
robin8624   2016.09.27 16:40

应该用delete[],更好的做法是再提供一个释放函数来对应。

qq_28050953
qq_28050953   2016.09.27 21:25

对于单变量分配内存时用new、删除内存时delete,对于数组用new[ ]和delete[ ]

VisualEleven
VisualEleven   Ds   Rxr 2016.09.30 14:08

new ... delete
new ..[] delete []对应的

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!