<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Textbox mit SFML führt immer zu std::bad_alloc]]></title><description><![CDATA[<p>Hallo zusammen, ich wollte in SFML eine Textbox erstellen. Die Klasse sieht so aus:</p>
<pre><code>#include &quot;Textbox.hpp&quot;

	Textbox::Textbox(std::string id, sf::Vector2f position ,sf::Vector2f size ,std::string defaultstring)
	{
		setID(id);
		mPosition = position;
		mSize     = size;
		setBlocked(false);
		mText.setString(defaultstring);
		mText.setCharacterSize(size.y-8);
		mIsActive = false;
		setClicked(false);

		createGraphic();
	}

	void Textbox::reset()
	{
	}

	void Textbox::createGraphic()
	{
		quads = sf::VertexArray(sf::Quads,5);
		lines = sf::VertexArray(sf::LinesStrip,5);

		quads[0].position = sf::Vector2f(mPosition.x , mPosition.y);
		quads[1].position = sf::Vector2f(mPosition.x + mSize.x,      mPosition.y);
		quads[2].position = sf::Vector2f(mPosition.x + mSize.x,      mPosition.y + mSize.y);
		quads[3].position = sf::Vector2f(mPosition.x , mPosition.y + mSize.y);
		quads[4].position = sf::Vector2f(mPosition.x , mPosition.y);

		quads[0].color = sf::Color(255,255,255,255);
		quads[1].color = sf::Color(255,255,255,255);
		quads[2].color = sf::Color(255,255,255,255);
		quads[3].color = sf::Color(255,255,255,255);
		quads[4].color = sf::Color(255,255,255,255);

		lines[0].position = sf::Vector2f(mPosition.x , mPosition.y);
		lines[1].position = sf::Vector2f(mPosition.x + mSize.x,      mPosition.y);
		lines[2].position = sf::Vector2f(mPosition.x + mSize.x,      mPosition.y + mSize.y);
		lines[3].position = sf::Vector2f(mPosition.x , mPosition.y + mSize.y);
		lines[4].position = sf::Vector2f(mPosition.x , mPosition.y);

		lines[0].color = sf::Color(0,0,0,255);
		lines[1].color = sf::Color(0,0,0,255);
		lines[2].color = sf::Color(0,0,0,255);
		lines[3].color = sf::Color(0,0,0,255);
		lines[4].color = sf::Color(0,0,0,255);

		mText.setColor(sf::Color(87,158,56));
		TextboxRect = sf::IntRect(mPosition.x,mPosition.y,mSize.x,mSize.y);
	}

	void Textbox::update(sf::Event *e, sf::RenderWindow *rw)
	{
		updateText();
		checkMouseToBox(e,rw);
	}

	void Textbox::draw(sf::RenderWindow *rw)
	{
		rw-&gt;draw(quads);
		rw-&gt;draw(lines);
		rw-&gt;draw(mText);
	}

	void Textbox::checkMouseToBox(sf::Event *e,sf::RenderWindow *rw)
	{

		if(TextboxRect.contains(static_cast&lt;sf::Vector2i&gt;(sf::Mouse::getPosition(*rw))))
		{
			if(mIsActive == false)
			{
				if(sf::Mouse::isButtonPressed(sf::Mouse::Button::Left))
				{
					if(sf::Event::MouseButtonReleased)
					{
							mIsActive = true; 
							mText.setString(&quot;&quot;);
					}
				}
			}
		}
	}

	void Textbox::checkEnterdText(sf::Event *e,sf::RenderWindow *rw)
	{
		if(mIsActive == true)
		{
			for (int i = 0; i &lt; 5; ++i)
			{
				quads[i].color = sf::Color(212,212,212);
			}
			mText.setColor(sf::Color(198,28,28));

			if(e-&gt;type == e-&gt;TextEntered)
			{
				std::string name = &quot;&quot;; 
				if (e-&gt;text.unicode &lt; 128)
				{
					if(e-&gt;text.unicode != 13)
					{
						 name += static_cast&lt;char&gt;(e-&gt;text.unicode);
						 mText.setString(mText.getString()+name);
					}
				}

				if(mText.getLocalBounds().width &gt; Textbox::mSize.x)
				{
					std::string t;
					t = mText.getString();
					t.resize(t.size()-1);
					mText.setString(&quot;&quot;);
					mText.setString(t);
				}

			}

			if (sf::Keyboard::isKeyPressed(sf::Keyboard::BackSpace))
			{	
				std::string temp;
				temp = mText.getString();
				if(temp.size() &gt;= 1)
				{
					temp.resize(temp.size()-1);
					mText.setString(temp);
				}
			}
		}
		else
		{
			mText.setColor(sf::Color(87,158,56));
			for (int i = 0; i &lt; 5; ++i)
			{
				quads[i].color = sf::Color(255,255,255);
			}
		}

		    if (sf::Keyboard::isKeyPressed(sf::Keyboard::Return))
			{	
				mIsActive = false;
			}
	}

	void Textbox::updateText()
	{
		mText.setPosition(mPosition.x,mPosition.y+mSize.y/2-mText.getCharacterSize()/2-5);
	}

	void Textbox::handle(sf::Event *e,sf::RenderWindow *rw)
	{
		checkEnterdText(e,rw);
	}

	void Textbox::setPosition(sf::Vector2f position)
	{
		mPosition = position;
		createGraphic();
	}
</code></pre>
<p>Wenn ich sie nun in einer anderen Datei aufrufen möchte:</p>
<pre><code>Textbox *t = new Textbox(...);
</code></pre>
<p>bekomme ich immer einen Fehler names &quot;C++ exception: std::bad_alloc&quot;. Weis jemand evtl. woran das liegt?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/327122/textbox-mit-sfml-führt-immer-zu-std-bad_alloc</link><generator>RSS for Node</generator><lastBuildDate>Thu, 09 Jul 2026 20:23:01 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/327122.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 24 Jul 2014 16:02:32 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Textbox mit SFML führt immer zu std::bad_alloc on Thu, 24 Jul 2014 16:02:32 GMT]]></title><description><![CDATA[<p>Hallo zusammen, ich wollte in SFML eine Textbox erstellen. Die Klasse sieht so aus:</p>
<pre><code>#include &quot;Textbox.hpp&quot;

	Textbox::Textbox(std::string id, sf::Vector2f position ,sf::Vector2f size ,std::string defaultstring)
	{
		setID(id);
		mPosition = position;
		mSize     = size;
		setBlocked(false);
		mText.setString(defaultstring);
		mText.setCharacterSize(size.y-8);
		mIsActive = false;
		setClicked(false);

		createGraphic();
	}

	void Textbox::reset()
	{
	}

	void Textbox::createGraphic()
	{
		quads = sf::VertexArray(sf::Quads,5);
		lines = sf::VertexArray(sf::LinesStrip,5);

		quads[0].position = sf::Vector2f(mPosition.x , mPosition.y);
		quads[1].position = sf::Vector2f(mPosition.x + mSize.x,      mPosition.y);
		quads[2].position = sf::Vector2f(mPosition.x + mSize.x,      mPosition.y + mSize.y);
		quads[3].position = sf::Vector2f(mPosition.x , mPosition.y + mSize.y);
		quads[4].position = sf::Vector2f(mPosition.x , mPosition.y);

		quads[0].color = sf::Color(255,255,255,255);
		quads[1].color = sf::Color(255,255,255,255);
		quads[2].color = sf::Color(255,255,255,255);
		quads[3].color = sf::Color(255,255,255,255);
		quads[4].color = sf::Color(255,255,255,255);

		lines[0].position = sf::Vector2f(mPosition.x , mPosition.y);
		lines[1].position = sf::Vector2f(mPosition.x + mSize.x,      mPosition.y);
		lines[2].position = sf::Vector2f(mPosition.x + mSize.x,      mPosition.y + mSize.y);
		lines[3].position = sf::Vector2f(mPosition.x , mPosition.y + mSize.y);
		lines[4].position = sf::Vector2f(mPosition.x , mPosition.y);

		lines[0].color = sf::Color(0,0,0,255);
		lines[1].color = sf::Color(0,0,0,255);
		lines[2].color = sf::Color(0,0,0,255);
		lines[3].color = sf::Color(0,0,0,255);
		lines[4].color = sf::Color(0,0,0,255);

		mText.setColor(sf::Color(87,158,56));
		TextboxRect = sf::IntRect(mPosition.x,mPosition.y,mSize.x,mSize.y);
	}

	void Textbox::update(sf::Event *e, sf::RenderWindow *rw)
	{
		updateText();
		checkMouseToBox(e,rw);
	}

	void Textbox::draw(sf::RenderWindow *rw)
	{
		rw-&gt;draw(quads);
		rw-&gt;draw(lines);
		rw-&gt;draw(mText);
	}

	void Textbox::checkMouseToBox(sf::Event *e,sf::RenderWindow *rw)
	{

		if(TextboxRect.contains(static_cast&lt;sf::Vector2i&gt;(sf::Mouse::getPosition(*rw))))
		{
			if(mIsActive == false)
			{
				if(sf::Mouse::isButtonPressed(sf::Mouse::Button::Left))
				{
					if(sf::Event::MouseButtonReleased)
					{
							mIsActive = true; 
							mText.setString(&quot;&quot;);
					}
				}
			}
		}
	}

	void Textbox::checkEnterdText(sf::Event *e,sf::RenderWindow *rw)
	{
		if(mIsActive == true)
		{
			for (int i = 0; i &lt; 5; ++i)
			{
				quads[i].color = sf::Color(212,212,212);
			}
			mText.setColor(sf::Color(198,28,28));

			if(e-&gt;type == e-&gt;TextEntered)
			{
				std::string name = &quot;&quot;; 
				if (e-&gt;text.unicode &lt; 128)
				{
					if(e-&gt;text.unicode != 13)
					{
						 name += static_cast&lt;char&gt;(e-&gt;text.unicode);
						 mText.setString(mText.getString()+name);
					}
				}

				if(mText.getLocalBounds().width &gt; Textbox::mSize.x)
				{
					std::string t;
					t = mText.getString();
					t.resize(t.size()-1);
					mText.setString(&quot;&quot;);
					mText.setString(t);
				}

			}

			if (sf::Keyboard::isKeyPressed(sf::Keyboard::BackSpace))
			{	
				std::string temp;
				temp = mText.getString();
				if(temp.size() &gt;= 1)
				{
					temp.resize(temp.size()-1);
					mText.setString(temp);
				}
			}
		}
		else
		{
			mText.setColor(sf::Color(87,158,56));
			for (int i = 0; i &lt; 5; ++i)
			{
				quads[i].color = sf::Color(255,255,255);
			}
		}

		    if (sf::Keyboard::isKeyPressed(sf::Keyboard::Return))
			{	
				mIsActive = false;
			}
	}

	void Textbox::updateText()
	{
		mText.setPosition(mPosition.x,mPosition.y+mSize.y/2-mText.getCharacterSize()/2-5);
	}

	void Textbox::handle(sf::Event *e,sf::RenderWindow *rw)
	{
		checkEnterdText(e,rw);
	}

	void Textbox::setPosition(sf::Vector2f position)
	{
		mPosition = position;
		createGraphic();
	}
</code></pre>
<p>Wenn ich sie nun in einer anderen Datei aufrufen möchte:</p>
<pre><code>Textbox *t = new Textbox(...);
</code></pre>
<p>bekomme ich immer einen Fehler names &quot;C++ exception: std::bad_alloc&quot;. Weis jemand evtl. woran das liegt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2410314</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2410314</guid><dc:creator><![CDATA[MrBambi]]></dc:creator><pubDate>Thu, 24 Jul 2014 16:02:32 GMT</pubDate></item><item><title><![CDATA[Reply to Textbox mit SFML führt immer zu std::bad_alloc on Thu, 24 Jul 2014 20:41:13 GMT]]></title><description><![CDATA[<p>was sagt der Debugger ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2410381</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2410381</guid><dc:creator><![CDATA[theconflict]]></dc:creator><pubDate>Thu, 24 Jul 2014 20:41:13 GMT</pubDate></item><item><title><![CDATA[Reply to Textbox mit SFML führt immer zu std::bad_alloc on Thu, 24 Jul 2014 23:05:44 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">if(mText.getLocalBounds().width &gt; Textbox::mSize.x) 
                 { 
                     std::string t; 
                     t = mText.getString(); 
                     t.resize(t.size()-1);  // &lt;---------------- nix globb!
                     mText.setString(&quot;&quot;); 
                     mText.setString(t); 
                 }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2410392</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2410392</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 24 Jul 2014 23:05:44 GMT</pubDate></item></channel></rss>