Qt中关于二维数组内存的分配为什么会报错?

我在创建了两个文件,一个用来显示登陆界面,一个用来作为小游戏主题。下面是两个文件的代码:

//snakegameli.h

#ifndef SNAKESGAMELI_H
#define SNAKESGAMELI_H

#include <QDialog>
#include "snakesgamemain.h"

namespace Ui {
class snakesgameLI;
}

class snakesgameLI : public QDialog
{
    Q_OBJECT

public:
    explicit snakesgameLI(QWidget *parent = 0);
    ~snakesgameLI();

private slots:

    void on_StartBtn_clicked();
    void on_closeBtn_clicked();

private:
    Ui::snakesgameLI *ui;
};

#endif // SNAKESGAMELI_H
//snakesgameli.cpp
#include "snakesgameli.h"
#include "ui_snakesgameli.h"

snakesgameLI::snakesgameLI(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::snakesgameLI)
{
    ui->setupUi(this);

}

snakesgameLI::~snakesgameLI()
{
    delete ui;
}


void snakesgameLI::on_StartBtn_clicked()
{
    accept();
}

void snakesgameLI::on_closeBtn_clicked()
{
    close();
}

还有一个ui文件运行后的效果是这样的
图片描述

在点击了开始游戏后登陆界面会消失,但是不会出现主体界面
下面是main函数

#include <QApplication>
#include "snakesgameli.h"
#include "snakesgamemain.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    snakesgameLI dialog;
    if(dialog.exec()!= QDialog::Accepted)
        return -1;

    SnakesGameMain w;
    w.show();

    return a.exec();
}

接下来是主体界面文件:

//snakesgamemain.h
#ifndef SNAKESGAMEMAIN_H
#define SNAKESGAMEMAIN_H

#include <QMainWindow>

#define HEIGHT 50
#define WIDTH 96

class SnakesGameMain : public QMainWindow
{
    Q_OBJECT

public:
    explicit SnakesGameMain(QWidget *parent = 0);
    ~SnakesGameMain();

private:
    int **matrix;
};

#endif // SNAKESGAMEMAIN_H
//snakesgamemain.cpp
#include "snakesgamemain.h"

SnakesGameMain::SnakesGameMain(QWidget *parent) :
    QMainWindow(parent)
{
    for(int i = 0; i < HEIGHT; i++)
    {
        matrix[i] = new int[WIDTH];
    }
    resize(800, 600);
}

SnakesGameMain::~SnakesGameMain()
{

}

在调试后发现程序在matrix[i] = new int[WIDTH]处中断
图片描述

反复检查了很多次很是不能理解,遂来求dalao们出手相助......

阅读 4.5k
2 个回答

你是要创建一个二维数组来操作移动是吧,我个人觉得其实没有必要用到动态分配,你的宽和高已经用宏定义好了,你可以直接使用matrixHEIGHT

问题解决了。报错的原因处在指针的内存分配上,总的来说还是自己对指针理解不够,犯了很严重的错误。

int **matrix;
matrix = new int*[HEIGHT];      //首先得给二级指针分配一段指向一级指针的内存,这样才能在后面使用matrix[i]
for(int i = 0; i < HEIGHT; i++)
{
    matrix[i] = new int[WIDTH];
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进