<?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[[Allegro] Programmabsturz]]></title><description><![CDATA[<p>Hallo liebe Spieleprogrammierer <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Letzens habe ich das Programmieren mit Allegro angefangen und hatte auch keine Probleme damit eine abgewandelte Pong-Variante zu programmieren. Jetzt aber habe ich das Problem, dass mein neues Prog. an einer bestimmten Stelle, die ich schon ausfindig gemacht habe abstürzt, obwohl ich keinen Fehler entdecken kann. Deswegen poste ich mal nur die relevanten Stellen.</p>
<p>blaster.h</p>
<pre><code class="language-cpp">// Gegner (Basis: Spiel)
class Gegner : Spiel
{
	public:
		Gegner();
		~Gegner();
		void initGegner();
		Gegner gegnerSetzen( int anzahl );
		void gegnerLoeschen( Gegner *gegner );
		void zeichneGegner();
};
// KLASSE: GEGNER ~ENDE~
</code></pre>
<p>blaster.cpp</p>
<pre><code class="language-cpp">Gegner Gegner::gegnerSetzen( int anzahl )
{	
	Gegner *gegner = new Gegner[anzahl]; // dynamisches Array

	for( int i = 0; i &lt; anzahl; i++ )
	{
		gegner[i].initGegner(); // Gegner &quot;i&quot; initialisieren
		gegner[i].zeichneGegner(); // Gegner &quot;i&quot; zeichnen
	}

	return *gegner; // Um später alles wieder löschen zu können. (Löschen einzelner Gegner auch möglich...)
};

void Gegner::zeichneGegner() // ZEICHNE
{
	rectfill( buffer, position_x - GEGNER_BREITE, position_y, position_x + GEGNER_BREITE, position_y + GEGNER_HOEHE, WEISS );
	Spiel::aufBildschirm(); // ausgeben
};

void Gegner::initGegner()
{
	do
	{
	position_y = 20; // OBEN
	position_x = rand() % ( 640 - GEGNER_BREITE ) + ( 0 + GEGNER_BREITE ); // zufällige X-KOORDINATE
	}while( besetzt[position_x][position_y] == true ); // Ist die Position bereits besetzt?
	besetzt[position_x][position_y] = true; // Position ist nun besetzt.
};

void Gegner::gegnerLoeschen( Gegner *gegner )
{
	delete[] gegner;
};
</code></pre>
<p>main.cpp</p>
<pre><code class="language-cpp">Gegner *temp = NULL;
	  Gegner feind;
	  *temp = feind.gegnerSetzen( 5 );
</code></pre>
<p>Jedes mal, wenn es zu der Stelle mit dem Setzen der Gegner kommt stürzt es ab. Liegt es eventuell an der Speicherverwaltung? Wenn ich die exe manuell starten will kommt aufjeden Fall der Fehler: &quot;R6010 - abort() has been called&quot;</p>
<p>EDIT: hatte was vergessen</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/273022/allegro-programmabsturz</link><generator>RSS for Node</generator><lastBuildDate>Fri, 28 Aug 2026 11:36:59 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/273022.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 29 Aug 2010 21:07:04 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [Allegro] Programmabsturz on Sun, 29 Aug 2010 21:09:02 GMT]]></title><description><![CDATA[<p>Hallo liebe Spieleprogrammierer <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Letzens habe ich das Programmieren mit Allegro angefangen und hatte auch keine Probleme damit eine abgewandelte Pong-Variante zu programmieren. Jetzt aber habe ich das Problem, dass mein neues Prog. an einer bestimmten Stelle, die ich schon ausfindig gemacht habe abstürzt, obwohl ich keinen Fehler entdecken kann. Deswegen poste ich mal nur die relevanten Stellen.</p>
<p>blaster.h</p>
<pre><code class="language-cpp">// Gegner (Basis: Spiel)
class Gegner : Spiel
{
	public:
		Gegner();
		~Gegner();
		void initGegner();
		Gegner gegnerSetzen( int anzahl );
		void gegnerLoeschen( Gegner *gegner );
		void zeichneGegner();
};
// KLASSE: GEGNER ~ENDE~
</code></pre>
<p>blaster.cpp</p>
<pre><code class="language-cpp">Gegner Gegner::gegnerSetzen( int anzahl )
{	
	Gegner *gegner = new Gegner[anzahl]; // dynamisches Array

	for( int i = 0; i &lt; anzahl; i++ )
	{
		gegner[i].initGegner(); // Gegner &quot;i&quot; initialisieren
		gegner[i].zeichneGegner(); // Gegner &quot;i&quot; zeichnen
	}

	return *gegner; // Um später alles wieder löschen zu können. (Löschen einzelner Gegner auch möglich...)
};

void Gegner::zeichneGegner() // ZEICHNE
{
	rectfill( buffer, position_x - GEGNER_BREITE, position_y, position_x + GEGNER_BREITE, position_y + GEGNER_HOEHE, WEISS );
	Spiel::aufBildschirm(); // ausgeben
};

void Gegner::initGegner()
{
	do
	{
	position_y = 20; // OBEN
	position_x = rand() % ( 640 - GEGNER_BREITE ) + ( 0 + GEGNER_BREITE ); // zufällige X-KOORDINATE
	}while( besetzt[position_x][position_y] == true ); // Ist die Position bereits besetzt?
	besetzt[position_x][position_y] = true; // Position ist nun besetzt.
};

void Gegner::gegnerLoeschen( Gegner *gegner )
{
	delete[] gegner;
};
</code></pre>
<p>main.cpp</p>
<pre><code class="language-cpp">Gegner *temp = NULL;
	  Gegner feind;
	  *temp = feind.gegnerSetzen( 5 );
</code></pre>
<p>Jedes mal, wenn es zu der Stelle mit dem Setzen der Gegner kommt stürzt es ab. Liegt es eventuell an der Speicherverwaltung? Wenn ich die exe manuell starten will kommt aufjeden Fall der Fehler: &quot;R6010 - abort() has been called&quot;</p>
<p>EDIT: hatte was vergessen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1945882</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1945882</guid><dc:creator><![CDATA[Chroma]]></dc:creator><pubDate>Sun, 29 Aug 2010 21:09:02 GMT</pubDate></item><item><title><![CDATA[Reply to [Allegro] Programmabsturz on Mon, 30 Aug 2010 07:48:44 GMT]]></title><description><![CDATA[<p>Chroma schrieb:</p>
<blockquote>
<p>[cpp]Gegner Gegner::gegnerSetzen( int anzahl )<br />
{<br />
...<br />
return *gegner;<br />
};</p>
</blockquote>
<p>ist das wirklich so gewollt?</p>
<blockquote>
<p>[cpp] Gegner *temp = NULL;<br />
Gegner feind;<br />
*temp = feind.gegnerSetzen( 5 );[/cpp]</p>
</blockquote>
<p>worauf zeigt temp waehrend du die variabel reinkopierst? das ist sicherlich nicht gewollt.</p>
<p>schau dir nochmal ein tutorial zu pointern an <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1945994</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1945994</guid><dc:creator><![CDATA[rapso]]></dc:creator><pubDate>Mon, 30 Aug 2010 07:48:44 GMT</pubDate></item><item><title><![CDATA[Reply to [Allegro] Programmabsturz on Mon, 30 Aug 2010 10:26:56 GMT]]></title><description><![CDATA[<p>rapso schrieb:</p>
<blockquote>
<p>ist das wirklich so gewollt?</p>
</blockquote>
<p>ups, da gibt er ja die variable und nicht die adresse zurück. habe es gerade mal mit &quot;&amp;&quot; versucht, aber das lässt er nicht zu (Konvertierung des Parameters 1 von 'Gegner **' in 'const Gegner &amp;' nicht möglich)</p>
<p>rapso schrieb:</p>
<blockquote>
<p>worauf zeigt temp waehrend du die variabel reinkopierst? das ist sicherlich nicht gewollt.</p>
</blockquote>
<p>ich habe temp doch vorher auf NULL zeigen lassen? Danach soll es eigentlich auf das Gegner Array zeigen.</p>
<p>Ich denke mein Problem liegt darin, dass ich gar keine Adresse returne, sondern durch Dereferenzierung die Daten aus der Stelle des Speichers. Aber wie kann ich die Funktion so abändern, dass er die Adresse zurückgibt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1946041</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1946041</guid><dc:creator><![CDATA[Chroma]]></dc:creator><pubDate>Mon, 30 Aug 2010 10:26:56 GMT</pubDate></item><item><title><![CDATA[Reply to [Allegro] Programmabsturz on Mon, 30 Aug 2010 10:55:13 GMT]]></title><description><![CDATA[<p>ich koennte dir zwar hier reinkopieren was in tutorials steht, aber ich glaube da bist du effektiver beim googlen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1946047</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1946047</guid><dc:creator><![CDATA[rapso]]></dc:creator><pubDate>Mon, 30 Aug 2010 10:55:13 GMT</pubDate></item><item><title><![CDATA[Reply to [Allegro] Programmabsturz on Mon, 30 Aug 2010 10:55:35 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/profile-var-mode-is-viewprofile-and-u-is-5577.html" rel="nofollow">rapso</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/viewforum-var-f-is-7.html" rel="nofollow">Spiele-/Grafikprogrammierung</a> in das Forum <a href="http://www.c-plusplus.net/forum/viewforum-var-f-is-15.html" rel="nofollow">C++</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-39405.html" rel="nofollow">C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?</a></p>
<p><em>Dieses Posting wurde automatisch erzeugt.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1946048</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1946048</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Mon, 30 Aug 2010 10:55:35 GMT</pubDate></item><item><title><![CDATA[Reply to [Allegro] Programmabsturz on Mon, 30 Aug 2010 14:20:37 GMT]]></title><description><![CDATA[<p>Ich glaube, dass mein Fehler doch woanders liegen muss. Habe es korrigiert und es hat immer noch nicht geklappt, habe es sogar mit einem vector versucht.</p>
<p>Habe jetzt Testweise eifnach eine Schleife in die Main geschrieben.</p>
<pre><code class="language-cpp">Gegner feind[10];

	  for( int i = 0; i &lt;= 5; i++ )
	  {
	  feind[i].initGegner();
	  feind[i].zeichneGegner();
	  }
</code></pre>
<p>auch mit dieser simplen Schleife tritt das Problem auf. Rufe ich &quot;initGegner()&quot; und &quot;zeichneGegner()&quot; ohne Schleife auf gibt es keine Probleme. Eine der beiden Funktionen scheint mit Schleifen nicht klarzukommen oder was kann noch falsch sein?</p>
<p>Beim Debuggen wirft es mich an die Zeile 99 der Datei &quot;chkstk.asm&quot;:</p>
<pre><code class="language-cpp">test    dword ptr [eax],eax     ; probe page.
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1946143</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1946143</guid><dc:creator><![CDATA[Chroma]]></dc:creator><pubDate>Mon, 30 Aug 2010 14:20:37 GMT</pubDate></item><item><title><![CDATA[Reply to [Allegro] Programmabsturz on Mon, 30 Aug 2010 15:48:02 GMT]]></title><description><![CDATA[<p>welche werte hat GEGNER_BREITE und wie gross ist &quot;besetzt&quot;</p>
<p>versuch mal statt [..] mit at(..) zu arbeiten, falls du dabei ueberindizierst, wird er an dieser stelle stehen bleiben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1946207</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1946207</guid><dc:creator><![CDATA[raps]]></dc:creator><pubDate>Mon, 30 Aug 2010 15:48:02 GMT</pubDate></item><item><title><![CDATA[Reply to [Allegro] Programmabsturz on Mon, 30 Aug 2010 17:02:38 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#define GEGNER_BREITE 10
...
bool besetzt[BS_BREITE][BS_HOEHE]; // Besetzt-Feld
</code></pre>
<p>also besetzt[640][480], aber das dürften doch nur um die 35kb sein, da es bool werte sind oder habe ich mich da verrechnet?</p>
<p>das mit dem at habe ich schon in meinem code stehen, da ich es jetzt auf vectoren geändert habe. deswegen wirft er mich an diese besagte zeile 99. habe es auch nochmal in der main geändert und komme dann ebenfalls dorthin.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1946232</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1946232</guid><dc:creator><![CDATA[Chroma]]></dc:creator><pubDate>Mon, 30 Aug 2010 17:02:38 GMT</pubDate></item><item><title><![CDATA[Reply to [Allegro] Programmabsturz on Tue, 31 Aug 2010 22:22:22 GMT]]></title><description><![CDATA[<p>Also, ich habe aufjeden Fall einen Stack Overflow, aber ich finde die Stelle nicht. Das besetzt Array ist nicht dran Schuld. Irgendwie muss ich durch die Schleife eine unendliche Rekursion oder was Ähnliches entstehen lassen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>EDIT: Die Schleife habe ich jetzt zum Funktionieren gebracht.</p>
<pre><code class="language-cpp">vector&lt;Gegner&gt; feind;

	  for( int i = 0; i &lt;= 5; i++ )
	  {
		  textout( screen, font, &quot;VOR INIT&quot;, 242, 220, WEISS );
		  rest( 4000 );
		  feind.push_back( Gegner() );
		  feind.at( i ).initGegner();
		  textout( screen, font, &quot;NACH INIT&quot;, 242, 240, WEISS );
		  textout( screen, font, &quot;VOR ZEICHNE&quot;, 242, 260, WEISS );
		  feind.at( i ).zeichneGegner();
		  textout( screen, font, &quot;NACH ZEICHNE&quot;, 242, 280, WEISS );
	  }
</code></pre>
<p>Jedoch funktioniert es mit der setzeGegner(anzahl); Funktion immer noch nicht.</p>
<pre><code class="language-cpp">void Gegner::setzeGegner( int anzahl )
{	
	vector&lt;Gegner&gt; gegner; // Vector
	for( int i = 0; i &lt; anzahl; i++ )
	{
		gegner.push_back( Gegner() );
		gegner.at( i ).initGegner(); // Gegner &quot;i&quot; initialisieren
		gegner.at( i ).zeichneGegner(); // Gegner &quot;i&quot; zeichnen
	}
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1946788</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1946788</guid><dc:creator><![CDATA[Chroma]]></dc:creator><pubDate>Tue, 31 Aug 2010 22:22:22 GMT</pubDate></item><item><title><![CDATA[Reply to [Allegro] Programmabsturz on Wed, 01 Sep 2010 01:51:50 GMT]]></title><description><![CDATA[<p>Chroma schrieb:</p>
<blockquote>
<p>Jedoch funktioniert es mit der setzeGegner(anzahl); Funktion immer noch nicht.</p>
</blockquote>
<p>was funktioniert denn nicht?<br />
die funktioen an und für sich sieht jedenfalls ok aus.<br />
auch, wenn es alles ein wenig komisch gemacht ist(und kommentare wie <em>// Vector</em> genau so sinnvoll sind, wie.. da fällt mir nicht mal was ein -.-)</p>
<pre><code class="language-cpp">//schon mal an und für sich nen komischer name - wie wäre es mit &quot;erzeugeGegner&quot; oder so was?
void Gegner::setzeGegner( int anzahl )
{	
	vector&lt;Gegner&gt; gegner;
	for( int i = 0; i &lt; anzahl; i++ )
	{
//so hier ists besser:
//		gegner.push_back( Gegner() );
//		gegner.back().initGegner();
//		gegner.back().zeichneGegner();
//so hattest du es:		
//		gegner.at( i ).initGegner(); // Gegner &quot;i&quot; initialisieren
//		gegner.at( i ).zeichneGegner(); // Gegner &quot;i&quot; zeichnen
//so würd ichs machen:
		Gegner to_add;
		to_add.initGegner(); //so ne init-Funktion braucht man eigtl nie - dafür ist der Konstruktor da
		to_add.zeichneGegner();
		gegner.push_back(to_add);
	}
 //gegner wird hier zerstört -&gt; Funktion macht nicht wirklich was, oder?
}
</code></pre>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1946800</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1946800</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Wed, 01 Sep 2010 01:51:50 GMT</pubDate></item><item><title><![CDATA[Reply to [Allegro] Programmabsturz on Wed, 01 Sep 2010 23:50:56 GMT]]></title><description><![CDATA[<p>ja, das mit dem init stimmt schon, aber die aufgeschriebene version ist schon älter und dann hatte ich das so übernommen, aber das ist ja keine große sache das noch abzuändern.</p>
<p>der gegner wird übrigens nicht zerstört, ist mir schon selber aufgefallen und habe es als membervariable deklariert:).</p>
<p>funktion sieht im moment übrigens so aus ( mit deiner kleinen verbesserung):</p>
<pre><code class="language-cpp">void Gegner::setzeGegner( int anzGegner )
{
	for( int i = 0; i &lt; anzGegner; i++ )
	{
	Gegner neu;
        neu.initGegner(); 
        neu.zeichneGegner();
        gegner.push_back( neu );
	}
};
</code></pre>
<p>werde berichten inwiefern es damit geht</p>
<p>EDIT:</p>
<p>Die Klasse Gegner sieht nun so aus:</p>
<pre><code class="language-cpp">// Gegner (Basis: Spiel) -------------------------------------------------------------------------------------
int Gegner::anzahl = 0; // Gegneranzahl

Gegner::Gegner()
{	
	do
	{
	gegner_y = 30; // OBEN
	gegner_x = rand() % ( BS_BREITE - GEGNER_BREITE ) + ( 0 + GEGNER_BREITE ); // zufällige X-KOORDINATE
	}while( besetzt[gegner_x][gegner_y] == true ); // Ist die Position bereits besetzt?
	besetzt[gegner_x][gegner_y] = true; // Position ist nun besetzt.
	anzahl++; // Anzahl der Gegner um 1 erhöhen
};
Gegner::~Gegner(){};

void Gegner::setzeGegner( int anzGegner )
{
	for( int i = 0; i &lt; anzGegner; i++ )
	{
		Gegner neuerGegner; 
        neuerGegner.zeichneGegner();
        gegner.push_back( neuerGegner );
	}
};

void Gegner::zerstoereGegner( int x, int y )
{	
	int gegnerID;

	for( int i = 0; i &lt; anzahl; i++ )
	{
		if( ( gegner.at( i ).gegner_x == x ) &amp;&amp; ( gegner.at( i ).gegner_y == y ) )
		{
			gegnerID = i;
			break;
		}
	}

	gegner.erase( gegner.begin() + ( gegnerID - 1 ) );
	anzahl--; // Anzahl um 1 Gegner verringern
};

void Gegner::zeichneGegner() // ZEICHNE
{
	rectfill( buffer, gegner_x - GEGNER_BREITE, gegner_y, gegner_x + GEGNER_BREITE, gegner_y + GEGNER_HOEHE, WEISS );
	Spiel::aufBildschirm(); // ausgeben
};
// KLASSE: GEGNER ~ENDE~ -------------------------------------------------------------------------------------
</code></pre>
<p>Das Programm stürzt schonmal nicht mehr ab. Jedoch zeichnet er jetzt nur einen Gegner anstatt zum Beispiel 5 <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1946802</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1946802</guid><dc:creator><![CDATA[Chroma]]></dc:creator><pubDate>Wed, 01 Sep 2010 23:50:56 GMT</pubDate></item></channel></rss>