c++ ostringstream对象在返回主函数后导致未处理的异常

标签 c++ exception sfml ostringstream unhandled

Unhandled exception at 0x53e83d80 in TestGame.exe: 0xC0000005: Access violation reading         
location 0xfeeefef6.

当我关闭 SFML 窗口时,我的 C++ 程序抛出一个未处理的异常(导致主类返回 0;

导致此问题的代码是一个 std::ostringstream 对象,如果我不使用它,问题就不会发生。

void Orbs::UpdateText()
{
oss.str("");

oss << air_orbs.number;
air_orbs.text.setString(oss.str());
oss.str("");

oss.flush();

}

类头:

#pragma once

#include <SFML/Graphics.hpp>
#include "FieldConst.h"
#include <sstream>

int const ORB_CHAR_SIZE = 20;
float const ORB_SCALE_SIZE = 0.25f;

struct  Orb
{
sf::Texture texture;
sf::Sprite sprite;
int number;
sf::Text text;

void Add(){
    number++;
}

void Remove(){
    number--;
}
};

class Orbs
{
public:
Orbs();
~Orbs();
void Render(sf::RenderWindow &target);
void UpdateText();

private:
Orb air_orbs, darkness_orbs, death_orbs, earth_orbs, electricity_orbs,
    fire_orbs, life_orbs, light_orbs, machine_orbs, metal_orbs, time_orbs,     water_orbs;

std::ostringstream oss;
};


Player::Player()
{
Player::name = "Player1";

Player::deck = new Deck();
Player::voidZone = new Deck();

Player::hand = new Hand();

Player::orbs = new Orbs();
}

. #pragma一次

#include "IncludeCards.h"
#include "Orbs.h"

class Player
{
 public:
Player();
~Player();

std::string GetName();
Deck* GetDeck();
Hand* GetHand();
Deck* GetVoidZone();
Orbs* GetOrbs();


void DrawFromDeck();
void DiscardToVoid(Card *cardToDiscard);

//void UseCard ability/invoke/spell

private:
std::string name;
Deck *deck;
Hand *hand;

Deck *voidZone;

Orbs *orbs;
};

我该怎么做才能修复它?提前致谢

最佳答案

我不明白你为什么让 oss 成为 Orbs 的成员。 它以更适合局部变量的方式使用,因此您应该将其删除:

class Orbs
{
public:
Orbs();
~Orbs();
void Render(sf::RenderWindow &target);
void UpdateText();

private:
Orb air_orbs, darkness_orbs, death_orbs, earth_orbs, electricity_orbs,
    fire_orbs, life_orbs, light_orbs, machine_orbs, metal_orbs, time_orbs,     water_orbs;
};

void Orbs::UpdateText()
{
    std::stringstream oss;
    oss << air_orbs.number;
    air_orbs.text.setString(oss.str());
}

或者使用 C++11:

void Orbs::UpdateText()
{
    air_orbs.text.setString(std::to_string(air_orbs.number));
}

关于c++ ostringstream对象在返回主函数后导致未处理的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15067617/

相关文章:

c++ - FreeRTOS 仅在发布时崩溃

java - IllegalStateException 错误

java - SQLite - 当数据库不存在时未捕获 executeUpdate 异常? ( java )

java - 是否可以使用 IllegalStateException 捕获所有子异常?

c# - NLayer MpegFile到SFML.Net SoundStream

c++ - OpenGL 是非常特定于机器的

c++ - 将 SFML 静态库链接到项目

c++ - 如何制作 ' i ' vector

c++ - 在 Linux 上使用 libserial 将 ASCII 控制字符发送到串行设备

c++ - 如何修复 C++ 中的 PyImport_Import(python35.dll 中的异常)