类中析构函数用delete出错

C++语言 码拜 9年前 (2016-04-15) 1401次浏览
#include <iostream>
using namespace std;
class A
{
char *name;
public:
A(char *a=”wang”){name=new char;name=a;}
~A(){
delete name;
cout<<“s”<<endl;
}
void s(){delete name;}
void show(){cout<<name<<endl;}
};
int main()
{
A b(“zhao”),c;
b.show();
c.show();
return 0;
}
解决方案

15

{name=new char;name=a;}
================================

name = new char[10]; strcpy(name,a);

5

既然用C++了,何不用std::string?

20

delete出错的时候,你首先要检查new是不是出了问题,最常见的就是new的空间过小,破坏了堆空间,导致释放出错

20

name=new char;name=a;
你这里只是单纯的指针赋值,让name指向分配的内存之后又让name重新指向a,最后你释放的是a的地址而不是分配的地址当然出错了
假如需要字符串复制,使用strcpy

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明类中析构函数用delete出错
喜欢 (0)
[1034331897@qq.com]
分享 (0)