中易网

C++ char*类型new的内存释放出问题了

答案:6  悬赏:0  
解决时间 2021-02-19 15:45
成员变量char * point;
在构造函数中point = new int[10];point="hello";
在析构函数中delete[] point;
运行的时候出现错误 这是为什么 如果把point="hello";删了就不报错了
最佳答案
delete [] q;//释放原来的
delete []p;//释放现在的 '
记住:内存释放了之后不能再使用该块内存,最好在释放之后将指针变量赋值为空 。
delete [] q;
q= NULL;

C++是在C语言的基础上开发的一种面向对象编程语言,应用广泛。C++支持多种编程范式 --面向对象编程、泛型编程和过程化编程。最新正式标准C++14于2014年8月18日公布。 其编程领域众广,常用于系统开发,引擎开发等应用领域,是至今为止最受广大程序员受用的最强大编程语言之一,支持类:类、封装、重载等特性!
全部回答
point 是指针。指向了一个字符串。这个字符串是占六个字节的。point = new int[10]; 这个是申请了一个动态内存,int型的占4个字节。 int[10].只是一个整形变量,并不是申请了10个int型的内存。而是,只申请了一个。六个字节的东西往四个字节里存,能不出错吗? 我是学c语言的,c++只是看了看。我按照c语言的东西来解释的。希望对你有用。
point = new char[5]; point = "fda";//这句话注销了就对了 不知道为什么 -------------------------------------------------------------------------- point = "fda" 应改为: memmove( point, "fda", 3); 或: strcpy( point, "fda"); 在最前面加上: #include "string.h"
new出来的对象需要delete,如果没有就不用。
point = new int[10] 表示你分配了 10个int型的空间,你给它赋字符串肯定错了。 就如 int s[5] = "hello"
point = new char[5];时 point指向了一新分配的内存 point = "fda";时,point抛弃了刚new的内存,指向了"fda"所在地址。fda"本身已经被分配好内存。所以刚才的new内存已经失去意义,因为point已经不再指向它了。这也是造成内存泄露的一个原因,因为刚动态分配的那块内存已经没办法释放了(被point指针抛弃了,没办法再找到这块内存地址,也就没法delete)。 "fda"的内存不是动态分配的,所以delete时出错。 ---------------------------------------------------------------------- 这要一个一个字符来操作:point[0] = 'f'; point[1] = 'd'; point[2] = 'a'; 或者参考 jxq61 兄的回答。(注意,这里才是真正的把字符存到新分配的内存里)
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
味多新调味品商行在什么地方啊,我要过去处理
考C1. C2. 有啥区别
直角三角形的三条高,要向哪里引垂线
SQL2000怎样设置自动备份
建材业务员 一把能拿到几千到几千的提成,我
荷花镇石双村计划生育协会在什么地方啊,我要
我今天接到上海打来的电话,说我买的宝骏车送
芒果的日文是什么
在北京职务侵占金额达到多少触犯刑法?
单片机中打开定时器的时候,也能保证cpu执行其
在两个恒容的密闭容器中进行下列两个可逆反应
我在艾依格定制的衣柜,设计师上门丈量尺寸,
是不是合法的公司在当地的工商局都有备案?
乐山好耍又便宜的地方
所谓的男女平等, 不是说男人做什么女人就做
推荐资讯
吃自己做的酒酿鸡蛋会头晕吗
体温37.6度正常吗?
为什么所有的软件都是以文件形式打开
请问你买的相机有外带闪光灯吗?
衡阳市 桂林市 那个城市富裕
Echo Me享我茶饮川大店在哪里啊,我有事要去
准贷记卡是必须存钱才能取吗?比如我存1000,
买了Gtx970显卡的话是不是不配4K的显示器就浪
线性代数 二次型化成标准型中,坐标变换X=CY
请教angularjs服务返回的问题
在乒乓球比赛的时候,我总是看到运动员发球的
我的吊兰现在叶片开始变黄了。。什么原因??
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?