我有一个程序,允许用户与3个CPU播放器一起玩Domino,难度各不相同。每个CPU播放器可以是初学者,中级或专家,并且每个难度都有其自己的类别。如果我在“ Window”类的开头(如下所示)启动我的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;
}
}

最佳答案

一种开始的方法是缩小引起故障的类别。如果他们都是初学者,或者都是中级,这是否可行?如果是这样,则另一个引起问题。

关于c++ - 在C++函数中创建新对象会导致程序崩溃,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27637821/

10-10 18:30
查看更多