成员变量char * point;
在构造函数中point = new int[10];point="hello";
在析构函数中delete[] point;
运行的时候出现错误 这是为什么 如果把point="hello";删了就不报错了
C++ char*类型new的内存释放出问题了
答案:6 悬赏:0
解决时间 2021-02-19 15:45
- 提问者网友:神仙爷爷
- 2021-02-18 16:43
最佳答案
- 二级知识专家网友:努力只為明天
- 2021-02-18 17:21
delete [] q;//释放原来的
delete []p;//释放现在的 '
记住:内存释放了之后不能再使用该块内存,最好在释放之后将指针变量赋值为空 。
delete [] q;
q= NULL;
C++是在C语言的基础上开发的一种面向对象编程语言,应用广泛。C++支持多种编程范式 --面向对象编程、泛型编程和过程化编程。最新正式标准C++14于2014年8月18日公布。 其编程领域众广,常用于系统开发,引擎开发等应用领域,是至今为止最受广大程序员受用的最强大编程语言之一,支持类:类、封装、重载等特性!
delete []p;//释放现在的 '
记住:内存释放了之后不能再使用该块内存,最好在释放之后将指针变量赋值为空 。
delete [] q;
q= NULL;
C++是在C语言的基础上开发的一种面向对象编程语言,应用广泛。C++支持多种编程范式 --面向对象编程、泛型编程和过程化编程。最新正式标准C++14于2014年8月18日公布。 其编程领域众广,常用于系统开发,引擎开发等应用领域,是至今为止最受广大程序员受用的最强大编程语言之一,支持类:类、封装、重载等特性!
全部回答
- 1楼网友:ー何必说爱
- 2021-02-18 22:12
point 是指针。指向了一个字符串。这个字符串是占六个字节的。point = new int[10]; 这个是申请了一个动态内存,int型的占4个字节。 int[10].只是一个整形变量,并不是申请了10个int型的内存。而是,只申请了一个。六个字节的东西往四个字节里存,能不出错吗?
我是学c语言的,c++只是看了看。我按照c语言的东西来解释的。希望对你有用。
- 2楼网友:开心就好
- 2021-02-18 20:37
point = new char[5];
point = "fda";//这句话注销了就对了 不知道为什么
--------------------------------------------------------------------------
point = "fda"
应改为:
memmove( point, "fda", 3);
或:
strcpy( point, "fda");
在最前面加上:
#include "string.h"
- 3楼网友:修女的自白
- 2021-02-18 20:20
new出来的对象需要delete,如果没有就不用。
- 4楼网友:何以畏孤独
- 2021-02-18 19:02
point = new int[10] 表示你分配了 10个int型的空间,你给它赋字符串肯定错了。
就如 int s[5] = "hello"
- 5楼网友:高冷不撩人
- 2021-02-18 18:45
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 兄的回答。(注意,这里才是真正的把字符存到新分配的内存里)
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯