2011-08-24 68 views
2

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

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

} 
+0

你删除其中包含指向你真正的对象,这可能不是在堆/动态存储器到存储器发布。很好,你有例外。有时,释放错误的记忆可能会导致严重的记忆腐败,需要大量的努力才能弄清楚! – sarat

回答

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*。而是尝试在Character**类型的指针上使用delete,并导致未定义的行为。

所以不是

delete &holland; 

,你必须使用

delete holland; 
+0

重新修复。不幸的是,同样的事情仍然发生:(还有其他建议吗? – zeboidlund

+0

@Holland:这应该解决了最初的问题。也许有一些'Character'类是如何实现的。你没有展示给我们。 – sharptooth

+0

已更新,以确保清晰。谢谢。 – zeboidlund

4
delete &holland; 

应该是

delete holland; 

减亵渎将不胜感激。

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

+0

大声笑,我可能是一个预防,但我不是一个检查员! – john