| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 602 人关注过本帖
标题:求助,高手看一下我的程序那里错了!!!
只看楼主 加入收藏
zhiyajun11
Rank: 1
等 级:新手上路
帖 子:17
专家分:1
注 册:2010-12-22
结帖率:88.89%
收藏
已结贴  问题点数:20 回复次数:7 
求助,高手看一下我的程序那里错了!!!
本人用的是vs2010,下面是代码:
#include <iostream>
#include <string.h>
using namespace std;
class CDemo
{
public:
    CDemo(char *s)
    {
        ps=new char(strlen(s)+1);
        strcpy(ps,s);
    }
    ~CDemo()
    {
        if(ps) delete[] ps;
    }
    void print()
    {
        cout<<ps<<endl;
    }
    CDemo& operator =(CDemo &a)
    {
        if(ps) delete[] ps;
        if(a.ps){
            ps=new char(strlen(a.ps)+1);
            strcpy(ps,a.ps);
        }
        else ps =0;
        return *this ;
    }
private:
    char *ps;
};
void main()
{
    CDemo d1("Key"),d2("Mouse");
    d1=d2;
    d1.print();
}
没有语法错误,可以运行就显示错误。谢谢了!!!
搜索更多相关主题的帖子: include public 
2010-12-22 23:39
dotaluna
Rank: 2
等 级:论坛游民
帖 子:6
专家分:20
注 册:2010-6-25
收藏
得分:0 
不知道你为什么要这么设计,问题出在指针的释放上
 if(ps)
         delete []ps;
2010-12-23 01:00
dotaluna
Rank: 2
等 级:论坛游民
帖 子:6
专家分:20
注 册:2010-6-25
收藏
得分:0 
不知道你为什么要这么设计,问题出在指针的释放上
 if(ps)
         delete []ps;
2010-12-23 01:00
yuccn
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:20 
犯了低级错误:
CDemo(char *s)
    {
        ps=new char(strlen(s)+1);
        strcpy(ps,s);
    }

这个改成:
CDemo(char *s)
    {
        ps=new char[strlen(s)+1];
        strcpy(ps,s);
    }
就行了,不过还是建议你在ps=new char[strlen(s)+1];之后初始化一下:
memset(ps, 0, sizeof(char) * (strlen(s)+1));
养成一个良好的习惯

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2010-12-23 09:43
yuccn
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:0 
设计的时候,应该考虑多一点,如果构造函数的时候:CDemo d1(NULL);会出现什么情况?好的设计,应该有容错处理

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2010-12-23 09:49
zhiyajun11
Rank: 1
等 级:新手上路
帖 子:17
专家分:1
注 册:2010-12-22
收藏
得分:0 
回复 5楼 yuccn
呵呵呵,谢谢啦,那个new char后面跟小括号和跟中括号有什么区别吗,这个问题我还是不太懂。。。希望解释一下,谢谢了!

2010-12-23 13:07
yuccn
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:0 
你可以设想一下
int *pInt = new int[10];
就是申请了十个int的空间

int *pInt = new int(10);
则为 :
int *pInt = new int
 *pInt = 10;
同理
ps=new char(strlen(s)+1);
---》 ps = new char
  *ps = strlen(s)+1;
也就是把strlen(s)+1 的ASCII码对应的值赋给了ps;

ps:
ps=new char(strlen(s)+1);实际你只申请了一个char
 

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2010-12-23 17:55
zhiyajun11
Rank: 1
等 级:新手上路
帖 子:17
专家分:1
注 册:2010-12-22
收藏
得分:0 
回复 7楼 yuccn
恩,简单明了,原来是这样,呵呵,谢谢啦!!!
2010-12-23 22:24
快速回复:求助,高手看一下我的程序那里错了!!!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026568 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved