一个急需解决的C++内存问题,各位大侠帮忙啊@!!~谢谢了

sghwqw 2006-05-06 09:51:37
如果你有兴趣,请帮我调试一下,错的地方帮我注释,先谢了~!~
#include <string.h>
#include <stdio.h>
class Base
{
private:
char * name;
public:
Base(char * className)
{
name = new char[strlen(className)];
strcpy(name, className);
}

~Base()
{
delete name;
}

char * copyName()
{
char newname [256];
strcpy(newname, name);
return newname;
}

virtual char * getName()
{
return name;
}

static void print(Base base)
{
printf("name: %s\n" , base.name);
}
};

class Subclass : public Base
{
public:
Subclass(char * className) : Base(className)
{
}
};

int main()
{
Base * pBase = new Subclass("test");
Base::print(*pBase);
printf("name: %s\n", pBase->getName());
printf("new name: %s\n", pBase->copyName());

return 0;
...全文
128 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
iawenll 2006-05-06
  • 打赏
  • 举报
回复
name = new char[strlen(className)+1];
//改一
//strlen返回的长度不含'\0'结束符在内,应加1

int main()
{
Base* pBase = new Subclass("test");
//Base::print(*pBase);
//此处,将指针指向了基类,所以下面的输出是随机的
//因为你原本构造的是Subclass类的,进行了截取
printf("name: %s\n", pBase->getName());
printf("new name: %s\n", pBase->copyName());
//Base::print(*pBase);
//改到此处,就可以正常输出了

return 0;
}
sankt 2006-05-06
  • 打赏
  • 举报
回复
有些小错误,我在上面标志了
sankt 2006-05-06
  • 打赏
  • 举报
回复
#include <string.h>
#include <stdio.h>
#include <stdlib.h>

class Base
{
private:
char * name;
public:
Base(char * className)
{
name = new char[strlen(className)+1]; //==========
strcpy(name, className);
}

~Base()
{
delete []name; //========
}

char * copyName(const char *newname)
{
int len = strlen(newname);
name = new char[len+1];

strcpy(name, newname);

}

virtual char * getName()
{
return name;
}

static void print(const Base& base)
{
printf("name: %s\n" , base.name);
}
};


class Subclass : public Base
{
public:
Subclass(char * className) : Base(className)
{
//
}
};

int main()
{
Base * pBase = new Subclass("test");
Base::print(*pBase);

printf("name: %s\n", pBase->getName());

printf("new name: %s\n", pBase->copyName("Hello"));

system("pause");

return 0;

}

65,184

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧