2013-10-20 65 views
0

昨晚我一直在工作的代碼已經拋出了一個全新的錯誤。一個我以前從未遇到過的問題,而我正在考慮向我的個人電腦扔東西。但是,昨晚所有人都非常有幫助,所以我想我會看看有沒有人對這個新問題有任何想法。Microsoft C++異常:std :: bad_alloc。什麼可能導致它?

有些東西會導致「Microsoft C++異常:std :: bad_alloc」,我認爲它位於main.cpp的第一行,但是這只是將玩家創建爲Hero(生物的孩子)類。我看不出爲什麼它不能這樣做。

我知道這可能是愚蠢的,我做得很糟......但任何幫助將不勝感激!

//main.cpp 

#include "Creature.h" 
#include "Hero.h" 
#include "Monster.h" 
#include <conio.h> 

using namespace std; 

int main() 
{ 
    Hero player(1); 
    Monster baddie; 

    player.setX(1); 
    player.setY(1); 

    baddie.setX(20); 
    baddie.setY(20); 

    player.Display(); 
    baddie.Display(); 

    baddie.chase(player); 
    player.Display(); 
    baddie.Display(); 

    _getch(); 
    return 0; 
} 


=================================== 

//Creature.h 

#pragma once 

#include <iostream> 
#include <string> 

using namespace std; 

class Creature 
{ 
protected: 
    int m_xpos; 
    int m_ypos; 
    string m_name; 

public: 
    Creature(string name, int xpos, int ypos); 
    void Display(void); 
    void left(void); 
    void right(void); 
    void up (void); 
    void down(void); 
    void setX(int x); 
    void setY(int y); 
    int getX(void); 
    int getY(void); 
}; 


=================================== 

//monster.h 

#pragma once 
#include "Creature.h" 

class Monster : public Creature 
{ 
public: 
    Monster(); 
    void chase(class Hero); 
    bool eaten(class Hero); 
}; 

=================================== 

//Hero.h 

#pragma once 
#include "Creature.h" 

class Hero : public Creature 
{ 
private: 
    int m_lives; 
    int m_score; 

public: 
    Hero(int lives); 
    void Display(void); 
    void setScore(void); 
}; 

=================================== 

//creature.cpp 

#include "Creature.h" 

Creature::Creature(string name, int xpos, int ypos) 
{ 
    m_xpos = xpos; 
    m_ypos = ypos; 
    m_name = name; 
} 

void Creature::Display(void) 
{ 
    cout << m_name << endl; 
    cout << m_xpos << endl; 
    cout << m_ypos << endl; 
} 

void Creature::left(void) 
{ 
    m_xpos = m_xpos+1; 
} 

void Creature::right(void) 
{ 
    m_xpos = m_xpos-1; 
} 

void Creature::up(void) 
{ 
    m_ypos = m_ypos-1; 
} 

void Creature::down(void) 
{ 
    m_ypos = m_ypos+1; 
} 

void Creature::setX(int x) 
{ 
    m_xpos = x; 
} 

void Creature::setY(int y) 
{ 
    m_ypos = y; 
} 

int Creature::getX(void) 
{ 
    return m_xpos; 
} 

int Creature::getY(void) 
{ 
    return m_ypos; 
} 

=================================== 

//Hero.cpp 

#include "Creature.h" 
#include "Hero.h" 

Hero::Hero(int lives) : Creature(m_name, m_xpos, m_ypos) 
{ 
    m_lives = lives; 
} 

void Hero::Display(void) 
{ 
    Creature::Display(); 
    cout << "Lives: " << m_lives << endl; 
    cout << "Score: " << m_score << endl; 
} 

void Hero::setScore(void) 
{ 
    m_score = 0; 
} 

=================================== 

//Monster.cpp 

#include "Creature.h" 
#include "Monster.h" 
#include "Hero.h" 

Monster::Monster() : Creature(m_name, m_xpos, m_ypos) 
{ 
} 

void Monster::chase(Hero hero) 
{ 
    if(getX() < hero.getX()) 
    { 
     right(); 
    } 

    if(getX() > hero.getX()) 
    { 
     left(); 
    } 

    if(getX() < hero.getX()) 
    { 
     down(); 
    } 

    if(getX() >hero.getX()) 
    { 
     up(); 
    } 
} 

bool Monster::eaten(Hero hero) 
{ 

    if((getX() == hero.getX())&&(getX() == hero.getX())) 
    { 
     return true; 
    } 
} 


=================================== 

的問題Hero::Hero(int lives) : Creature(m_name, m_xpos, m_ypos)奠定並與Monster.cpp文件equivilant。

將它們更改爲Hero::Hero(int lives) : Creature("", 0,0)修復了內存問題。

再次感謝一個美好的社區!

希望你永遠不會再看到這段代碼! (!手指交叉)

+3

'英雄::英雄(int lives):生物(m_name'我不認爲m_name已經初始化在這一點。 –

回答

3

錯誤與該行:

Hero::Hero(int lives) : Creature(m_name, m_xpos, m_ypos) 

您無法通過自己的未初始化的數據成員傳遞給它創造Creature子對象。您需要將某些有效值傳遞給基類構造函數,例如Creature("", 0, 0)

錯誤是由於嘗試複製未初始化的std::string對象而造成的。

+0

我知道這將是愚蠢的!非常感謝你,你已經修好了一切。 –

相關問題