程序意外完成

时间:2011-08-24 06:49:14

标签: c++

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

#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()
{

}

2 个答案:

答案 0 :(得分:4)

delete &holland;

应该是

delete holland;

不太亵渎。

另一方面,非常感谢发布简明扼要地说明问题的简短例子。

答案 1 :(得分:2)

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

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*。相反,您尝试在delete类型的指针上使用Character**,这会导致未定义的行为。

所以而不是

delete &holland;

你必须使用

delete holland;