0

你能帮我解决这个问题吗?我有四节课。蜜罐头:

class Honeypot
{

public:
int getNumberOfInterfaces();
Honeypot (int numberOfInterfaces);
virtual std::string typeHoneypot()=0;
protected:
    int numberOfInterfaces;
};

蜜罐.cpp:

Honeypot::Honeypot(int numberOfInterfaces){
this-> numberOfInterfaces = numberOfInterfaces;
}

int Honeypot::getNumberOfInterfaces(){
return numberOfInterfaces;
}

Honeypot 类有子 HoneypotV 和 HoneypotN。现在我创建了具有多个 neteorkInterfaces 的对象:

Honeypot* NetworkType::createObject(int res1, int res2, int res3) {
    if (res1 == 1 && res2 == 1 && res3 == 1) {
    HoneypotV p1(3);
    return &p1;
} else {
    HoneypotN p2(3);
    return &p2;
}

在主函数中:

NetworkType select;

Honeypot *p;

p = select.createObject(1,1,1);

cout << p->typeHoneypot() << endl;
cout << p-> getNumberOfInterfaces() << endl;

typeHoneypot() 是正确的,但是 getNumberOfInterfaces() 返回值 -858993460,正确的是 3。

谢谢你的回复。

4

2 回答 2

3

您返回一个指向局部变量的指针,但是当您退出函数时,所有局部变量都将被销毁,并且指针将引用已销毁的对象

关于主函数中的代码:您声明了一个指向对象的指针并没有初始化它,所以指针指向内存中的一些垃圾

于 2013-05-27T20:43:14.527 回答
1

如果你想返回它,你应该动态地实例化它:

Honeypot* NetworkType::createObject(int res1, int res2, int res3) {
    if (res1 == 1 && res2 == 1 && res3 == 1) {
    HoneypotV *p1 = new HoneypotV(3);
    return p1;
} else {
    HoneypotN *p2 = new HoneypotN(3);
    return p2;
}
于 2013-05-27T21:20:59.483 回答