请教:C++中成员指针变量如何初始化才不会出错呢,比如这个

#include<iostream>usingnamespacestd;#include<string.h>classpointer{public:char*p;poin... #include<iostream>
using namespace std;
#include<string.h>
class pointer
{
public:
char *p;
pointer():p("Gavin")
{
char *p=new char[6];
}
~pointer()
{
delete p;
}
};
void main()
{
pointer x;
cout<<x.p<<endl;
}
为什么能通过可是运行时会报错呢,我猜想是指针越位的问题,可是应该怎么改?谢了
展开
 我来答
wanfustudio
2011-05-10 · TA获得超过1万个赞
知道大有可为答主
回答量:5513
采纳率:100%
帮助的人:3768万
展开全部
char *p;
pointer():p("Gavin")
{
char *p=new char[6];
}
注意,成员变量的p和你申请内存的p不是同一个
你成员变量的p用初始化列表初始化的,指向了gavin,
你申请内存的p是临时变量,出了括号就释放了,内存虽在,但是没有指针指向它了,无法释放了

析构函数里面释放p不合法,因为你已经让它指向了常量字符串,改法
pointer()
{
p=new char[6];
memset(p,0,6);
strcpy(p,"Gavin");

}
追问
你给的方法虽然是能解决这个问题,可是我们平时老师讲的是用初始化符表的方法对指针进行初始化,memset函数我们都不会用,能不能以初始化符表的方式对它初始化并使用呢?谢谢了
追答
如果你理解了我的意思就很好改了
pointer():p("Gavin")
{
//char *p=new char[6];
}
~pointer()
{
//delete p;
}

初始化列表的话,就将动态申请释放内存的语句去掉吧, 初始化列表是在函数体执行前执行的
函数体里面再给它申请空间就不对了
最多可以写成这个形式
#include
using namespace std;
#include
class pointer
{
public:
char *p;
pointer():p("Gavin")
{
}
pointer(char *pStr):p(pStr)
{
}
~pointer()
{
}
};
void main()
{
char *p = "1234";
pointer x;
pointer y(p);
cout<<x.p<<endl;
cout<<y.p<<endl;
}

默认指向gavin
可以用参数初始化
yw7
2011-05-10
知道答主
回答量:12
采纳率:0%
帮助的人:0
展开全部
char *p=new char[6];
这句没有初始化。可以加一句:
p[0] = 0;
追问
pointer():p("Gavin")初始化符表有初始化啊,类内指针不能那么初始化的啊,程序能运行,出结果的同时会提示出现异常
追答
字符串没有初始化,打印的时候会出错
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式