<?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[Segmentation Fault]]></title><description><![CDATA[<p>Leider schlage ich mich schon seit gestern immerwieder mit demselben Problem rum, und habe weder eine Erklärung dafür, noch eine Lösung..</p>
<p>Ich versuche im Moment ein Programm zu schreiben, was mithilfe einer Klasse einfach nur ein .png Bild auf dem Bildschirm anzeigt.</p>
<p>Nachdem ich das Problem schonmal in der Grafik/Spieleprogrammierung gepostet habe, hat man mir geraten mich mit dem Debugger auf die Suche nach dem Probem zu machen, was ich (nachdem ich den Debugger von Dev-C++ für unzureichend befunden habe und auf Code::Blocks umgestiegen bin) auch getan habe, danach hat aber leider niemand mehr etwas gepostet.</p>
<p>Da ein segmentation fault wohl ein C++ Problem ist, will ich also nun die Leute hier nach Rat fragen.</p>
<p>Ich bekomme immerwieder an derselben Stelle (Zeile 30 im folgenden Code) einen Segmentation Fault, aber ich weiß einfach nicht warum, denn der betreffende Pointer (*screen) wurde deklariert (in der Header Datei) und zugewiesen (Zeile 12). Image wurde bis dahin bereits zugewiesen, den Quelltext habe ich aber aus Gründen der Übersichtlichkeit weggelassen.</p>
<p>Ich hoffe, daß mir jemand zumindest einen Hinweis geben kann, was da falsch läuft, und wenn nicht, dann wäre ich dankbar, wenn mir jemand erklärt, wie man segmentation faults gerenell behebt.</p>
<pre><code>#include &quot;Frame.hpp&quot;

Frame::Frame()
{
    screen=NULL;
    image=NULL;
}

void Frame::createScreen()
{
	screen=SDL_SetVideoMode(image-&gt;w, image-&gt;h, image-&gt;format-&gt;BitsPerPixel, SDL_HWSURFACE | SDL_FULLSCREEN);
	if(!screen)
	{
		cout &lt;&lt; &quot;SDL_SetVideoMode: &quot; &lt;&lt; SDL_GetError() &lt;&lt; endl;
		SDL_FreeSurface(image);
		SDL_Quit();
		quit();
	}
}

void Frame::render()
{
	SDL_BlitSurface(image,0,screen,0);
}

void Frame::flip()
{
    SDL_Flip(screen);
}
</code></pre>
<pre><code>#ifndef FRAME_HPP
#define FRAME_HPP

#include &lt;stdio.h&gt;
#include &lt;iostream&gt;

#include &quot;SDL/SDL.h&quot;
#include &quot;SDL/SDL_image.h&quot;

using namespace std;

class Frame
{
    public:
        Frame();

        void init();
        void quit();
        void loadImage();
        void createScreen();
        void render();
        void flip();
        void processEvents();

        SDL_Surface *screen, *image;
};

#endif
</code></pre>
<pre><code>#include &lt;stdio.h&gt;
#include &lt;iostream&gt;

#include &quot;Frame.hpp&quot;

using namespace std;

int main(int argc, char *argv[])
{
    Frame NewFrame;

    NewFrame.init();
    NewFrame.loadImage();
    NewFrame.render();
    NewFrame.flip();
    NewFrame.quit();

	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/180079/segmentation-fault</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 12:22:03 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/180079.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 28 Apr 2007 14:01:59 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Segmentation Fault on Sat, 28 Apr 2007 14:01:59 GMT]]></title><description><![CDATA[<p>Leider schlage ich mich schon seit gestern immerwieder mit demselben Problem rum, und habe weder eine Erklärung dafür, noch eine Lösung..</p>
<p>Ich versuche im Moment ein Programm zu schreiben, was mithilfe einer Klasse einfach nur ein .png Bild auf dem Bildschirm anzeigt.</p>
<p>Nachdem ich das Problem schonmal in der Grafik/Spieleprogrammierung gepostet habe, hat man mir geraten mich mit dem Debugger auf die Suche nach dem Probem zu machen, was ich (nachdem ich den Debugger von Dev-C++ für unzureichend befunden habe und auf Code::Blocks umgestiegen bin) auch getan habe, danach hat aber leider niemand mehr etwas gepostet.</p>
<p>Da ein segmentation fault wohl ein C++ Problem ist, will ich also nun die Leute hier nach Rat fragen.</p>
<p>Ich bekomme immerwieder an derselben Stelle (Zeile 30 im folgenden Code) einen Segmentation Fault, aber ich weiß einfach nicht warum, denn der betreffende Pointer (*screen) wurde deklariert (in der Header Datei) und zugewiesen (Zeile 12). Image wurde bis dahin bereits zugewiesen, den Quelltext habe ich aber aus Gründen der Übersichtlichkeit weggelassen.</p>
<p>Ich hoffe, daß mir jemand zumindest einen Hinweis geben kann, was da falsch läuft, und wenn nicht, dann wäre ich dankbar, wenn mir jemand erklärt, wie man segmentation faults gerenell behebt.</p>
<pre><code>#include &quot;Frame.hpp&quot;

Frame::Frame()
{
    screen=NULL;
    image=NULL;
}

void Frame::createScreen()
{
	screen=SDL_SetVideoMode(image-&gt;w, image-&gt;h, image-&gt;format-&gt;BitsPerPixel, SDL_HWSURFACE | SDL_FULLSCREEN);
	if(!screen)
	{
		cout &lt;&lt; &quot;SDL_SetVideoMode: &quot; &lt;&lt; SDL_GetError() &lt;&lt; endl;
		SDL_FreeSurface(image);
		SDL_Quit();
		quit();
	}
}

void Frame::render()
{
	SDL_BlitSurface(image,0,screen,0);
}

void Frame::flip()
{
    SDL_Flip(screen);
}
</code></pre>
<pre><code>#ifndef FRAME_HPP
#define FRAME_HPP

#include &lt;stdio.h&gt;
#include &lt;iostream&gt;

#include &quot;SDL/SDL.h&quot;
#include &quot;SDL/SDL_image.h&quot;

using namespace std;

class Frame
{
    public:
        Frame();

        void init();
        void quit();
        void loadImage();
        void createScreen();
        void render();
        void flip();
        void processEvents();

        SDL_Surface *screen, *image;
};

#endif
</code></pre>
<pre><code>#include &lt;stdio.h&gt;
#include &lt;iostream&gt;

#include &quot;Frame.hpp&quot;

using namespace std;

int main(int argc, char *argv[])
{
    Frame NewFrame;

    NewFrame.init();
    NewFrame.loadImage();
    NewFrame.render();
    NewFrame.flip();
    NewFrame.quit();

	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1275178</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1275178</guid><dc:creator><![CDATA[Sceletor]]></dc:creator><pubDate>Sat, 28 Apr 2007 14:01:59 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation Fault on Sat, 28 Apr 2007 17:01:53 GMT]]></title><description><![CDATA[<p>hm, sieht eigentlich in ordnung aus. Deswegen kann ich nur raten:<br />
* bist du sicher dass der Zeiger screen nicht verändert wird? Kannst ja ausgeben lassen und vergleichen.<br />
* Evtl ist das bild zu groß für den bildschirm. SDL hat da keine Prüfung. Aber Ich vermute mal dass der Fehler dann schon bei SDL_BlitSurface() auftreten würde.</p>
<p>Edit:<br />
Achja was mir auffällt. Du verwendest SDL_Flip() aber hast keine Doppelpuffer aktiviert.</p>
<p>nochmal edit:<br />
was passiert eigentlich in Frame::quit()? vielleicht ist der screen == NULL<br />
wird also quit() aufgeruft und das beendet das programm nicht.<br />
ist aber nur ne spekulation. kann (noch) keine gedanken lesen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1275298</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1275298</guid><dc:creator><![CDATA[matimatiker]]></dc:creator><pubDate>Sat, 28 Apr 2007 17:01:53 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation Fault on Sat, 28 Apr 2007 16:57:19 GMT]]></title><description><![CDATA[<p>hmm und sonnst debugging---</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1275306</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1275306</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Sat, 28 Apr 2007 16:57:19 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation Fault on Sat, 28 Apr 2007 17:48:42 GMT]]></title><description><![CDATA[<p>Hm, wie oben beschrieben, der Fehler tritt genau in Zeile 30 bei SDL_Flip(screen) auf und ich bin mir auch sicher, das screen vorher nicht verändert wird (so groß is mein Code nicht).</p>
<p>Ich habe aber durch Hinweise aus <a href="http://Gamedev.net" rel="nofollow">Gamedev.net</a> schon den dicken Fehler gefunden:</p>
<p>Ich muss *bevor* ich die Klasse Frame instanziiere (also hier schon in der main() ) den</p>
<pre><code>screen=SDL_SetVideoMode(image-&gt;w, image-&gt;h, image-&gt;format-&gt;BitsPerPixel, SDL_HWSURFACE | SDL_FULLSCREEN);
</code></pre>
<p>aufgerufen haben, sonst knallts.</p>
<p>Wäre jetzt nur schön zu erfahren, warum das so ist....</p>
<p>p.s. das Bild hat 1280x960, und mein Bildschirm is n 22 Zoll Breitbild TFT <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1275334</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1275334</guid><dc:creator><![CDATA[Sceletor]]></dc:creator><pubDate>Sat, 28 Apr 2007 17:48:42 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation Fault on Sat, 28 Apr 2007 19:22:11 GMT]]></title><description><![CDATA[<p>Sceletor schrieb:</p>
<blockquote>
<p>Ich muss *bevor* ich die Klasse Frame instanziiere (also hier schon in der main() ) den<br />
...<br />
aufgerufen haben, sonst knallts.</p>
</blockquote>
<p>Echt? Hab die Funktion eigentlich selbst in eine Klasse gekapselt. Keine Ahnung warum das abstürzen sollte. Bei mir gehts ohne Probleme.</p>
<p>Hast du meinen Vorschlag mit SDL_DOUBLEBUF ausprobiert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1275374</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1275374</guid><dc:creator><![CDATA[matimatiker]]></dc:creator><pubDate>Sat, 28 Apr 2007 19:22:11 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation Fault on Sat, 28 Apr 2007 21:01:52 GMT]]></title><description><![CDATA[<p>Also ich hab SDL_DOUBLEBUF jetzt gerade ausprobiert, ändert aber leider nichts an meinem Problem:</p>
<p>Wenn ich die SDL_SetVideoMode in eine Klasse auslagere, knallts, und zwar dann, wenn ich SDL_Flip() auf den SDL_Surface Pointer ausführe, den ich mit SDL_SetVideoMode zugewiesen habe.</p>
<p>In meinem C++ Buch (aus dem ich im Moment die Ideen klaue <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> ) hat der Autor ne Framework Klasse als Singleton, auf die er vor der Instanziierung der Game-Klasse zugreift und dort die SDL_Init() und die SDL_SetVideoMode() ausführt.</p>
<p>Sein komplettes Spiel mit der Technik funktioniert bei mir, aber mein &quot;Abklatsch&quot; nicht. Und so groß sind die Unterschiede wirklich nicht.. *heul*</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1275419</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1275419</guid><dc:creator><![CDATA[Sceletor]]></dc:creator><pubDate>Sat, 28 Apr 2007 21:01:52 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation Fault on Sat, 28 Apr 2007 21:22:19 GMT]]></title><description><![CDATA[<p>Tipp: Solche Fehler findet man leicht mit Duma oder Valgrind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1275427</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1275427</guid><dc:creator><![CDATA[rüdiger]]></dc:creator><pubDate>Sat, 28 Apr 2007 21:22:19 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation Fault on Sat, 28 Apr 2007 21:26:57 GMT]]></title><description><![CDATA[<p>hast du evtl. selbst SDL_Init() vergessen?</p>
<blockquote>
<p>Wenn ich die SDL_SetVideoMode in eine Klasse auslagere, knallts</p>
</blockquote>
<p>Heißt das, dass wenn du SDL_SetVideoMode() innerhalb von main() aufrufst, funktioniert das ganze, ohne dass es &quot;knallt&quot;?<br />
Komisch...</p>
<p>Kannst du aber evtl. den Link zu dem Thread/Artikel/Wasauchimmer hier posten. Interessiert mich auch.</p>
<p>Was mir noch einfällt:<br />
Ich hatte mal so ein Problem mit SDL+OpenGL. Ich habe so ca. als erste Funktion srand() aufgerufen. Und eines Tages ist das Programm auch andauernd abgestürzt bzw. wurde nichts gezeichnet (, eins von beiden wars), bis ich den srand()-Aufruf entfernte. Weiß bis heute nicht warum das nicht funktionierte. Evtl. rufst du auch irgendso eine Funktion auf?</p>
<p>rüdiger schrieb:</p>
<blockquote>
<p>Tipp: Solche Fehler findet man leicht mit Duma oder Valgrind.</p>
</blockquote>
<p>wenn er windows benutzt bringt ihm der tipp nicht viel. Oder habe ich da was verpasst?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1275429</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1275429</guid><dc:creator><![CDATA[matimatiker]]></dc:creator><pubDate>Sat, 28 Apr 2007 21:26:57 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation Fault on Sat, 28 Apr 2007 21:47:03 GMT]]></title><description><![CDATA[<p>Danke für den Hinweis, rüdiger <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>Ich bin aber auch mit meinem Code::Blocks debugger nun doch noch was weiter gekommen, hab mich leider bei Dev-C++ daran gewöhnt, daß der Debugger nix kann..</p>
<p>Mein Problem ist, daß der Screen pointer in meiner Frame Klasse zugewiesen wird und dann bei der Rückkehr in die main() seine Gültigkeit verliert.</p>
<p>Und wenn ich dann nen flip mit dem ungültigen Pointer mache... *bumm*</p>
<p>EDIT:</p>
<p>Hier der link für matimatiker:<br />
<a href="http://www.gamedev.net/community/forums/topic.asp?topic_id=434947" rel="nofollow">http://www.gamedev.net/community/forums/topic.asp?topic_id=434947</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1275433</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1275433</guid><dc:creator><![CDATA[Sceletor]]></dc:creator><pubDate>Sat, 28 Apr 2007 21:47:03 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation Fault on Sat, 28 Apr 2007 22:08:16 GMT]]></title><description><![CDATA[<p>wenn ich den typen richtig verstanden habe. so hat er vergessen sdl vorher zu initialisieren:</p>
<blockquote>
<p>And If anyone else sees this .. well ... never do anything in main before you initalize SDL. <sup>_</sup></p>
</blockquote>
<p>Bei dir fehlt auch der SDL_Init() aufruf</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1275447</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1275447</guid><dc:creator><![CDATA[matimatiker]]></dc:creator><pubDate>Sat, 28 Apr 2007 22:08:16 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation Fault on Sat, 28 Apr 2007 22:12:14 GMT]]></title><description><![CDATA[<p>Also erstmal hab ich SDL_Init() definitiv aufgerufen, wie gesagt, ich hab ein Problem damit, dass mein pointer verloren geht wenn ich von ner Klasse zurück in die main() gehe. Das ist DEFINITIV das ganze Problem, und ich arbeite im Moment an ner Lösungsstrategie, wird wohl wahrscheinlich auf ne globale Variable hinauslaufen...</p>
<p>Und der Typ meint was da steht: Man soll nix in der main() machen *bevor* man SDL initialisiert hat, es geht also um die Reihenfolge <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1275448</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1275448</guid><dc:creator><![CDATA[Sceletor]]></dc:creator><pubDate>Sat, 28 Apr 2007 22:12:14 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation Fault on Sat, 28 Apr 2007 22:18:38 GMT]]></title><description><![CDATA[<p>Sceletor schrieb:</p>
<blockquote>
<p>Also erstmal hab ich SDL_Init() definitiv aufgerufen.</p>
</blockquote>
<p>Wie gesagt, ich kann noch keine Gedanken lesen. Mit der Textsuche, habe ich es aber in dem geposteten Quelltext nicht finden können.</p>
<p>Bevor du auf globale Variablen zurückgreifst, hast du schon SDL_GetVideoSurface() probiert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1275451</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1275451</guid><dc:creator><![CDATA[matimatiker]]></dc:creator><pubDate>Sat, 28 Apr 2007 22:18:38 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation Fault on Sat, 28 Apr 2007 22:32:34 GMT]]></title><description><![CDATA[<p>Sorry, ich wollte wirklich nicht unfreundlich sein.</p>
<p>Und SDL_GetViedoSurface hört sich ganz gut an <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="🙂"
    /> Gleich mal ausprobieren..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1275455</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1275455</guid><dc:creator><![CDATA[Sceletor]]></dc:creator><pubDate>Sat, 28 Apr 2007 22:32:34 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation Fault on Sat, 28 Apr 2007 23:17:59 GMT]]></title><description><![CDATA[<p>COOL!!!!! Mit SDL_GetVideoSurface() gehts!!!</p>
<p>Ich weiss zwar nicht, warum der Code aus dem Buch geht, obwohl es eigentlich der gleich ist, aber so kann ich erstmal prima weiterarbeiten, nachdem ich mich jetzt 2 Tage mit dem segmentation fault bei dem Zeiger rumgeschlagen habe.</p>
<p>VIELEN VIELEN dank an matimatiker!</p>
<p>Ich habe aber noch eine Frage:</p>
<p>Wenn das Programm nun startet, ist der Bildschirm erstmal schwarz und bleibt es auch bis ich entweder das Fenster in Windows mit einem anderen verdecke und wieder sichtbar mache oder bis er beim Debuggen in der Methode SDL_PollEvents() angekommen ist.</p>
<p>Muss also was mit den beiden Surfaces sein... Wodurch wird so ein Verhalten ausgelöst?</p>
<p>EDIT: Habs schon, meine SDL_Flip() hatte auch den falschen Screen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1275463</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1275463</guid><dc:creator><![CDATA[Sceletor]]></dc:creator><pubDate>Sat, 28 Apr 2007 23:17:59 GMT</pubDate></item></channel></rss>