在C ++函数中创建新对象会导致程序崩溃

时间:2014-12-24 13:40:03

标签: c++ function object

我有一个程序允许用户针对3个CPU玩家玩多米诺骨牌,难度各不相同。每个CPU播放器可以是初级,中级或专家,每个难度都有它自己的类。如果我在我的“窗口”的开头启动我的3个CPU播放器'类(如下),程序运行正常。

在Window.h中

public:
Window(QWidget *parent = 0);

Intermediate *cpu1;
Beginner *cpu2;
Intermediate *cpu3;

在Window.cpp中

Window::Window(QWidget *parent):QDialog(parent)   {

cpu1 = new Intermediate;
cpu2 = new Beginner;
cpu3 = new Intermediate;
}

但是我希望用户能够在游戏开始时选择CPU难度,所以我现在在“窗口”中有一个功能。创建对象。一旦我调用此函数游戏冻结,我会弹出一条错误消息,告诉我程序已意外结束。

void Window:: startGame(){

cpu1 = new Intermediate;
cpu2 = new Beginner;
cpu3 = new Intermediate;
}

如果有人能够向我解释发生了什么以及我能做些什么来解决这个问题会很棒。

Intermediate.cpp(Beginner.cpp几乎相同)

#include "intermediate.h"

Intermediate::Intermediate()
{
tilePlaced = false;
skipGo  = false;

}
void Intermediate::findDoubles(int a[7][2]){

for(int i = 0; i < 7; i++){             // Creates new doubles list after each go.
    doublesList[i] = 0;
}


for(int i = 0; i < 7; i++){         // Creates a list of doubles
    if ((a[i][0] == a[i][1]) &&  (a[i][0] != 7)){
        doublesList[a[i][0]] = 1;
    }
}

}
bool Intermediate::addDomino(){}    // Function that finds best domino to replace and returns bool

if(tilePlaced == false){
    pass++;
    text += "\nPassed turn";
    return false;
}
else{
    pass = 0;
    text += QString("\nPlaced [%1 : %2]").arg(a).arg(b);
    return true;
}
}

1 个答案:

答案 0 :(得分:1)

一种开始的方法是缩小导致故障的类。如果他们都是初学者,或者他们都是中级的话,它是否有效?如果是这样,那么另一个就会导致问题。