下面是一段漏洞百出的代码:
































































这是经过修改的:
#include <string.h>
#include <stdio.h>
#include <stdio.h>
class Base
{
private:
char * name;
public:
Base(char * className = NULL)
{
name = new char[strlen(className)+1];
strcpy(name, className);
name[strlen(className)] = '/0';
}
{
private:
char * name;
public:
Base(char * className = NULL)
{
name = new char[strlen(className)+1];
strcpy(name, className);
name[strlen(className)] = '/0';
}
Base(Base& base)
{
if ( base.name )
{
name = new char[strlen(base.name)+1];
strcpy(name, base.name);
name[strlen(base.name)] = '/0';
}
else
name = '/0';
}
{
if ( base.name )
{
name = new char[strlen(base.name)+1];
strcpy(name, base.name);
name[strlen(base.name)] = '/0';
}
else
name = '/0';
}
~Base()
{
if ( name )
delete []name;
}
{
if ( name )
delete []name;
}
char * copyName()
{
char* newname = new char[strlen(name)+1];
strcpy(newname, name);
newname[strlen(name)] = '/0';
return newname;
}
{
char* newname = new char[strlen(name)+1];
strcpy(newname, name);
newname[strlen(name)] = '/0';
return newname;
}
virtual char * getName()
{
return name;
}
{
return name;
}
static void print(Base base)
{
printf("name: %s/n" , base.name);
}
};
{
printf("name: %s/n" , base.name);
}
};
class Subclass : public Base
{
public:
Subclass(char * className) : Base(className)
{
}
};
{
public:
Subclass(char * className) : Base(className)
{
}
};
int main()
{
Base * pBase = new Subclass("test");
{
Base * pBase = new Subclass("test");
Base::print(*pBase);
printf("name: %s/n", pBase->getName());
printf("name: %s/n", pBase->getName());
char * tempName = pBase->copyName();
printf("new name: %s/n", tempName);
delete []tempName;
printf("new name: %s/n", tempName);
delete []tempName;
delete pBase;
return 0;
}
}