2011-08-24 67 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