c++构造函数使用new,该怎么解决

c++构造函数使用new
#include<iostream.h>
class A
{
char *p;
public:
A()
{
p=new char[10];
p="Jenny";
}
~A()
{
delete[]p;
}
void print()
{
cout<<p<<endl;
}

};
void main()
{
A a;
a.print();
}
运行出错,析构函数释放内存出错,为什么
------解决思路----------------------
A的构造函数里,先分配10个字符,p指向首地址,然后修改p指向了字符串“Jenny”, “Jenny”是常亮字符串,不是动态分配的,所以析构函数里delete []p 会出错。
------解决思路----------------------
delete 不是按照名字释放内存的,
而是根据指针的值(内存地址)释放内存的
delete 如果要释放一个指针,
就必须保证指针是new 出来的本来面目。
类型和值都不能错误,对号 释放。

new 的啥样子,delete 也同样那个样子。
new<--->delete
new []<---->delete[]
而且,类型也要一致。





------解决思路----------------------
引用:
#include<iostream.h>
class A
{
char *p;
public:
A()
{
p=new char[10];
p="Jenny";
}
~A()
{
delete[]p;
}
void print()
{
cout<<p<<endl;
}

};
void main()
{
A a;
a.print();
}
运行出错,析构函数释放内存出错,为什么

修改后的代码:

#include<iostream.h>
#include<string.h>
class A
{
char *p;
public:
A()
{
p=new char[10];
strcpy(p,"Jenny"); //“Jenny”是常量字符串,用strcpy()将Jenny字符串复制到p所占的内存区。
}
~A()
{
delete[]p;
}
void print()
{
cout<<p<<"\t"<<endl;
}

};
void main()
{
A a;
a.print();
}