程序意外完成

Program Has Unexpectedly Finished

本文关键字:意外 程序      更新时间:2023-10-16

无论出于何种原因,我的执行程序都无法正常工作。

#include <QtCore/QCoreApplication>
    #include <tinyxml/tinyxml.h>
    #include "classowner.h"
    #include "character.h"
    int main(int argc, char *argv[])
    {
        Character * holland = new Character("Holland", HUMAN, MALE);
        delete &holland;
        std::cout << "Hello, World!" << std::endl;
        return 0;
    }

我所有的输出状态都是程序无法正常执行。输出不会显示,但是当我不分配对象时,它会显示。很明显,这就是物体。我做错了什么?

更新

问题似乎不仅仅在于删除和分配内存。因此,我将发布Character类后面的实现。

标题:

#include <iostream>
#ifndef CHARACTER_H
#define CHARACTER_H
enum Race {HUMAN, DARK_ELF};
enum Gender {MALE, FEMALE};
class Character
{
public:
    Character();
    Character(std::string char_name, Race char_race, Gender char_gender);
    ~Character();
    int get_id() { return this->char_id; }
    std::string get_name() { return this->name; }
    Race get_race() { return this->race; }
    Gender get_gender() { return this->gender; }
private:
    int char_id;
    static int * char_count;
    std::string name;
    Race race;
    Gender gender;
};

  #endif // CHARACTER_H

//来源:

#include "character.h"
#include <iostream>
int * Character::char_count = 0;
Character::Character()
{
    this->char_id = *char_count;
    char_count++;
}
Character::Character(std::string char_name, Race char_race, Gender char_gender)
{
    this->char_id = *char_count;
    char_count++;
    this->name = char_name;
    this->race = char_race;
    this->gender = char_gender;
}
Character::~Character()
{
}
delete &holland;

应该是

delete holland;

少一些脏话就好了。

另一方面,张贴一个简短的例子,简明扼要地说明这个问题是非常感谢的。

首先,您尝试取消引用一个空指针:

int * Character::char_count = 0;

class Character的两个构造函数都执行此

this->char_id = *char_count;

这是一种取消引用空指针的尝试。这个代码对我来说毫无意义,我想你可以使用int而不是指针:

int Character::char_count = 0;
//then
this->char_id = char_count;

也在这里:

Character * holland = new Character("Holland", HUMAN, MALE);

您将创建一个类型为class Character的对象。您必须通过指向class Character的指针来删除该对象——指针的类型应该是Character*。相反,您尝试在类型为Character**的指针上使用delete,这会导致未定义的行为。

所以不是

delete &holland;

你必须使用

delete holland;