2017-03-13 7 views
0

私は複数のゲームを扱うプロジェクトに取り組んでいます。ユーザーがゲームの1つを選択するとエラーが発生し、アプリケーションがクラッシュします。これはプロファイルモードでのみ発生します。私が手
エラーは、Microsoft Visual C++ランタイムライブラリからである:...このapplicaitonは珍しい 方法で終了するランタイムを要求していQTプロジェクトがプロファイル上でクラッシュし、リリースとデバッガで実行中

オンライン読んでから、それは私がいるようです不適切なメモリ管理をしていると、どこに問題があるのか​​分からないようです。ここに私のC++のソースファイルがある:あなたが動的に割り当てされていません(私は仮定)何かを削除する

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

#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); 
    */ 
} 
+0

あなたの質問を[編集]して[mcve]を提供してください。 –

答えて

1

あなたの問題は、おそらくこの2行です。

そして、このデストラクタを持つように注意してください:

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

あなたがSticksオブジェクトをコピーする場合は、あまりにもポインタuiをコピーしますので、あなたは、同じアドレスに複数回を削除しようとしています。

+0

これは、感謝のようです!今は、オブジェクトをUIフォームから正しく削除する方法を理解する必要があります。 –

関連する問題