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

标签 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;
}
}

最佳答案

开始的一种方法是缩小导致错误的类的范围。如果他们都是初学者,或者如果他们都是中级,它是否有效?如果是这样,则另一个问题导致了问题。

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

相关文章:

c++ - 如何创建类对象的 vector

c++ - malloc() 用于跟踪分配大小的空间

javascript - 捕获发送到 console.log 的 javascript 对象

javascript - 当键名由变量表示时,如何将键分配给对象文字?

java - java中如何交换两个对象的字段?

c++ - 找出采样器何时在 DirectShow 中准备就绪

c++ - 有没有办法在使用 GLFW 按下一个键后只处理一个输入事件?

c++ - 通过调用函数打印质数

c++ - 从非常量对象调用 const 函数

python - 如何随机化您名字和姓氏的首字母