C++ char*类型new的内存释放出问题了
成员变量char*point;在构造函数中point=newint[10];point="hello";在析构函数中delete[]point;运行的时候出现错误这是为什...
成员变量char * point;
在构造函数中point = new int[10];point="hello";
在析构函数中delete[] point;
运行的时候出现错误 这是为什么 如果把point="hello";删了就不报错了
不好意思 是我打错了 是point = new char[10];
代码如下 :
#include<iostream>
using namespace std;
class C
{
char* point;
public :
C()
{
point = new char[5];
point = "fda";//这句话注销了就对了 不知道为什么
}
~C()
{
delete[] point;
}
};
main()
{
C c;
}
不知道为什么会报错 展开
在构造函数中point = new int[10];point="hello";
在析构函数中delete[] point;
运行的时候出现错误 这是为什么 如果把point="hello";删了就不报错了
不好意思 是我打错了 是point = new char[10];
代码如下 :
#include<iostream>
using namespace std;
class C
{
char* point;
public :
C()
{
point = new char[5];
point = "fda";//这句话注销了就对了 不知道为什么
}
~C()
{
delete[] point;
}
};
main()
{
C c;
}
不知道为什么会报错 展开
6个回答
展开全部
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日公布。 其编程领域众广,常用于系统开发,引擎开发等应用领域,是至今为止最受广大程序员受用的最强大编程语言之一,支持类:类、封装、重载等特性!
展开全部
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 兄的回答。(注意,这里才是真正的把字符存到新分配的内存里)
point = "fda";时,point抛弃了刚new的内存,指向了"fda"所在地址。fda"本身已经被分配好内存。所以刚才的new内存已经失去意义,因为point已经不再指向它了。这也是造成内存泄露的一个原因,因为刚动态分配的那块内存已经没办法释放了(被point指针抛弃了,没办法再找到这块内存地址,也就没法delete)。
"fda"的内存不是动态分配的,所以delete时出错。
----------------------------------------------------------------------
这要一个一个字符来操作:point[0] = 'f'; point[1] = 'd'; point[2] = 'a'; 或者参考 jxq61 兄的回答。(注意,这里才是真正的把字符存到新分配的内存里)
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
point 是指针。指向了一个字符串。这个字符串是占六个字节的。point = new int[10]; 这个是申请了一个动态内存,int型的占4个字节。 int[10].只是一个整形变量,并不是申请了10个int型的内存。而是,只申请了一个。六个字节的东西往四个字节里存,能不出错吗?
我是学c语言的,c++只是看了看。我按照c语言的东西来解释的。希望对你有用。
我是学c语言的,c++只是看了看。我按照c语言的东西来解释的。希望对你有用。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
程序在析构函数中释放字符数组的时候失败了,程序试图去释放尚未分配的内存空间
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
point = new int[10] 表示你分配了 10个int型的空间,你给它赋字符串肯定错了。
就如 int s[5] = "hello"
就如 int s[5] = "hello"
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询