簡體   English   中英

QT項目在配置文件上崩潰,與發行版和調試器一起運行

[英]QT project crashing on profile, running with release and debugger

我一直在從事具有多個游戲功能的項目。 用戶選擇其中一個游戲時出現錯誤,應用程序崩潰。 這僅在配置文件模式下發生。
我收到的錯誤來自Microsoft Visual C ++運行時庫:

此應用程序已請求運行時以異常方式終止...

從網上閱讀看來,我的內存管理不當,似乎無法弄清楚問題出在哪里。 這是我的c ++源文件:

#include "sticks.h"
#include "ui_sticks.h"
Sticks::Sticks(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::Sticks)
{
   ui->setupUi(this);
}

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

int Sticks::selectUserChoice(int choice){
   ui->pushButton_select1->setEnabled(false);
   ui->pushButton_select2->setEnabled(false);
   ui->pushButton_select3->setEnabled(false);
   numsticks = numsticks - choice;
   //game_msg = "You grabbed " + QString::number(choice) + " sticks. There are " + QString::number(numsticks) + " sticks remaining";
   //setMessage(game_msg);
    computerChoice = getComputerChoice(numsticks);
    numsticks = numsticks - computerChoice;
   if (numsticks == 1)
       ui->pushButton_select1->setEnabled(true);
   if (numsticks == 2){
       ui->pushButton_select1->setEnabled(true);
       ui->pushButton_select2->setEnabled(true);
   }
   else{
       ui->pushButton_select1->setEnabled(true);
       ui->pushButton_select2->setEnabled(true);
       ui->pushButton_select3->setEnabled(true);
   }
}

   int Sticks::getComputerChoice(int current_sticks){
       /*Get a pseudo-random integer between 1 and 3 (inclusive)*/
       int choice = rand() % 3 + 1;

        if (current_sticks >=2 && current_sticks <=4){
            choice = current_sticks - 1;
    }
    else if (current_sticks == 1){
        return current_sticks;
    }
    return choice;
}

void Sticks::on_pushButton_select1_clicked()
{
selectUserChoice(1);
}

void Sticks::on_pushButton_select2_clicked()
{
   selectUserChoice(2);
}

void Sticks::on_pushButton_select3_clicked()
{
selectUserChoice(3);
}

void Sticks::on_pushButton_select_num_sticks_clicked()
{
    numsticks = ui->lineEdit_numsticks->text().toInt();
    if (numsticks < 10 || numsticks > 100) //Check that numsticks is 10-100
        return;
    std::ostringstream ss;
    ss << "There are " << numsticks << " sticks remaining";
    std::string str = ss.str();
    QString qstr = QString::fromStdString(str);
    ui->label_current_sticks->setText(qstr);
    //ui->horizontalLayout->removeWidget(ui->pushButton_select_num_sticks);
    delete ui->pushButton_select_num_sticks;
    delete ui->lineEdit_numsticks;
    ui->pushButton_select1->setEnabled(true);
    ui->pushButton_select2->setEnabled(true);
    ui->pushButton_select3->setEnabled(true);
    ui->label_grab->setEnabled(true);
}

void Sticks::setMessage(QString msg){
    /*
    prev_msg3 = ui->label_msg3->text();
    prev_msg2 = ui->label_msg2->text();
    prev_msg1 = ui->label_msg1->text();
    ui->label_msg4->setText(prev_msg3);
    ui->label_msg3->setText(prev_msg2);
    ui->label_msg2->setText(prev_msg1);
    ui->label_msg1->setText(msg);
    */
}

您的問題可能在以下兩行中:

delete ui->pushButton_select_num_sticks;
delete ui->lineEdit_numsticks;

您正在刪除的東西(我想)是您沒有動態分配的。

並注意以下析構函數:

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

如果復制Sticks對象,您也將復制指針ui ,因此您將在同一地址上多次刪除。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM