<?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[Problem mit Methode]]></title><description><![CDATA[<p>Hallo, da ich mich im Moment mit DirectX befasse, bin ich dabei mir eine Sprite-Klasse zu erstellen. Um ein Sprite zu laden, benutze ich folgende Methode:</p>
<p>CSprite.cpp</p>
<pre><code class="language-cpp">//...
VOID CSprite::Load( LPSTR lpszName, LPSTR lpszFile )
{
	if( m_mapTextures.find( lpszName ) != m_mapTextures.end() )
	{
		return;
	}
	else{
		LPDIRECT3DTEXTURE9 lpTexture;

		if( FAILED( D3DXCreateTextureFromFileEx( m_lpDevice,
												 lpszFile,
												 D3DX_DEFAULT_NONPOW2,
												 D3DX_DEFAULT_NONPOW2,
												 1,
												 NULL,
												 D3DFMT_UNKNOWN,
												 D3DPOOL_MANAGED,
												 D3DX_DEFAULT,
												 D3DX_DEFAULT,
												 NULL,
												 NULL,
												 NULL,
												 &amp;lpTexture ) ) )
		{
			FILE *pFile;

			pFile = fopen( &quot;C:\\error.txt&quot;, &quot;w&quot; );
			fprintf( pFile, &quot;CSprite::Load() fehlgeschlagen.&quot; );
			fclose( pFile );
		}
		else{
			m_mapTextures[lpszName] = lpTexture;
		}
	}
}
//...
</code></pre>
<p>Wenn ich die Methode nun in CMain.cpp aufrufe, funktioniert alles fehlerfrei. Die Sprites werden geladen und auch angezeigt.</p>
<p>CMain.cpp:</p>
<pre><code class="language-cpp">//...
m_pSprite = new CSprite();
//...
m_pSprite-&gt;Load( &quot;map&quot;, &quot;c:\\test.png&quot; );
</code></pre>
<p>Wenn ich aber dieselbe Methode in einer anderen Datei aufrufe, klappt es auf einmal nicht mehr.</p>
<p>CMenu.cpp</p>
<pre><code class="language-cpp">//...
m_pSprite = new CSprite();
//...
m_pSprite-&gt;Load( &quot;map&quot;, &quot;c:\\test.png&quot; );
</code></pre>
<p>Ich kriege dann immer folgende Fehlermeldung:</p>
<p>Eine Ausnahme (erste Chance) bei 0x00621421 in 2DSpiel.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0xcdcdcdcd.<br />
Unbehandelte Ausnahme bei 0x00621421 in 2DSpiel.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0xcdcdcdcd.<br />
Das Programm &quot;[3212] 2DSpiel.exe: Systemeigen&quot; wurde mit Code 0 (0x0) beendet.</p>
<p>Der Fehler soll wohl irgendwo in D3DXCreateTextureFromFileEx() liegen.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/221717/problem-mit-methode</link><generator>RSS for Node</generator><lastBuildDate>Mon, 05 Oct 2026 10:48:33 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/221717.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 02 Sep 2008 11:49:43 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit Methode on Tue, 02 Sep 2008 11:49:43 GMT]]></title><description><![CDATA[<p>Hallo, da ich mich im Moment mit DirectX befasse, bin ich dabei mir eine Sprite-Klasse zu erstellen. Um ein Sprite zu laden, benutze ich folgende Methode:</p>
<p>CSprite.cpp</p>
<pre><code class="language-cpp">//...
VOID CSprite::Load( LPSTR lpszName, LPSTR lpszFile )
{
	if( m_mapTextures.find( lpszName ) != m_mapTextures.end() )
	{
		return;
	}
	else{
		LPDIRECT3DTEXTURE9 lpTexture;

		if( FAILED( D3DXCreateTextureFromFileEx( m_lpDevice,
												 lpszFile,
												 D3DX_DEFAULT_NONPOW2,
												 D3DX_DEFAULT_NONPOW2,
												 1,
												 NULL,
												 D3DFMT_UNKNOWN,
												 D3DPOOL_MANAGED,
												 D3DX_DEFAULT,
												 D3DX_DEFAULT,
												 NULL,
												 NULL,
												 NULL,
												 &amp;lpTexture ) ) )
		{
			FILE *pFile;

			pFile = fopen( &quot;C:\\error.txt&quot;, &quot;w&quot; );
			fprintf( pFile, &quot;CSprite::Load() fehlgeschlagen.&quot; );
			fclose( pFile );
		}
		else{
			m_mapTextures[lpszName] = lpTexture;
		}
	}
}
//...
</code></pre>
<p>Wenn ich die Methode nun in CMain.cpp aufrufe, funktioniert alles fehlerfrei. Die Sprites werden geladen und auch angezeigt.</p>
<p>CMain.cpp:</p>
<pre><code class="language-cpp">//...
m_pSprite = new CSprite();
//...
m_pSprite-&gt;Load( &quot;map&quot;, &quot;c:\\test.png&quot; );
</code></pre>
<p>Wenn ich aber dieselbe Methode in einer anderen Datei aufrufe, klappt es auf einmal nicht mehr.</p>
<p>CMenu.cpp</p>
<pre><code class="language-cpp">//...
m_pSprite = new CSprite();
//...
m_pSprite-&gt;Load( &quot;map&quot;, &quot;c:\\test.png&quot; );
</code></pre>
<p>Ich kriege dann immer folgende Fehlermeldung:</p>
<p>Eine Ausnahme (erste Chance) bei 0x00621421 in 2DSpiel.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0xcdcdcdcd.<br />
Unbehandelte Ausnahme bei 0x00621421 in 2DSpiel.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0xcdcdcdcd.<br />
Das Programm &quot;[3212] 2DSpiel.exe: Systemeigen&quot; wurde mit Code 0 (0x0) beendet.</p>
<p>Der Fehler soll wohl irgendwo in D3DXCreateTextureFromFileEx() liegen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1575273</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1575273</guid><dc:creator><![CDATA[Barney Gumble]]></dc:creator><pubDate>Tue, 02 Sep 2008 11:49:43 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Methode on Tue, 02 Sep 2008 13:01:41 GMT]]></title><description><![CDATA[<p>also:<br />
<code>FILE *pFile;</code> ist C... C++ hat streams...</p>
<p><code>m_pSprite = new CSprite();</code> lass mal die Klammern weg und sag, obs dasnn klappt ^^</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1575310</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1575310</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Tue, 02 Sep 2008 13:01:41 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Methode on Tue, 02 Sep 2008 14:28:22 GMT]]></title><description><![CDATA[<p>Wenn ich die Klammern weg lasse, bekomme ich immer noch die gleiche Fehlermeldung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1575388</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1575388</guid><dc:creator><![CDATA[Barney Gumble]]></dc:creator><pubDate>Tue, 02 Sep 2008 14:28:22 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Methode on Tue, 02 Sep 2008 15:11:39 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/16305">@unskilled</a>,<br />
Die klammern muss man nur bei sowas weglassen:<br />
<code>CSprite Sprite;</code><br />
Wenn man die Klammern belassen würde, würde dies als Funktionsdeklaration angesehen werden.</p>
<p>@Barney Gumble,<br />
Die Adresse <code>0xcdcdcdcd</code> ist ein Hinweis auf eine ungültige Adresse, wie es auch schon die Zugriffsverletzung ist. Diese spezielle Adresse wird bei der MFC und bei DirectX im Debug-Modus gesetzt, wenn ein delete aufgerufen wurde. Zumindest habe ich das so in Erinnerung.</p>
<p>Naja, wie auch immer, allgemein kann man sagen, dass du irgendwo eine ungültige Adresse übergibst. Entweder noch nicht initialisiert oder bereits gelöscht. Dies führt dann zur Zugriffsverletzung. Überprüf also mal, allenfalls mit dem Debugger, dass du gültigen Speicher übergibst.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1575431</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1575431</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Tue, 02 Sep 2008 15:11:39 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Methode on Tue, 02 Sep 2008 20:25:31 GMT]]></title><description><![CDATA[<p>Geh da halt mal mit dem Debugger durch, dann siehst du, wo der Fehler liegt.</p>
<p>btw:<br />
Dieses &quot;Logging-System&quot; ist aber nicht dein ernst, oder? - Du schreibst in eine Datei rein, die du jedesmal öffnest? Und dann nichtmal append?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1575575</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1575575</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Tue, 02 Sep 2008 20:25:31 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Methode on Mon, 08 Sep 2008 16:04:08 GMT]]></title><description><![CDATA[<p>Das Problem liegt bei m_lpDevice. Wenn ich die Variable beim Funktionsaufruf als Parameter übergebe funktioniert alles einwandfrei. Wenn ich aber die Variable in einer anderen Funktion erst als Parameter übergebe, dann als Member-Variable abspeichere und dann mit einer anderen Funktion auf die abgespeicherte Variable zugreife, funktioniert es auf einmal nicht mehr. Woran kann das liegen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1578739</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1578739</guid><dc:creator><![CDATA[Barney Gumble]]></dc:creator><pubDate>Mon, 08 Sep 2008 16:04:08 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Methode on Mon, 08 Sep 2008 16:55:56 GMT]]></title><description><![CDATA[<p>Barney Gumble schrieb:</p>
<blockquote>
<p>Das Problem liegt bei m_lpDevice. Wenn ich die Variable beim Funktionsaufruf als Parameter übergebe funktioniert alles einwandfrei. Wenn ich aber die Variable in einer anderen Funktion erst als Parameter übergebe, dann als Member-Variable abspeichere und dann mit einer anderen Funktion auf die abgespeicherte Variable zugreife, funktioniert es auf einmal nicht mehr. Woran kann das liegen?</p>
</blockquote>
<p>du machst irgendwo einen fehler.<br />
vermutlich kommst du mit zeigern nicht klar und aenderst irgendwo eine kopie des zeigers statt den zeiger selber.</p>
<p>debugger helfen hier enorm.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1578759</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1578759</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Mon, 08 Sep 2008 16:55:56 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Methode on Mon, 08 Sep 2008 17:23:42 GMT]]></title><description><![CDATA[<p>Ist es als 3D-/Spieleprogrammierer eigentlich Pflicht C++ zu vergewaltigen wo es nur geht?</p>
<p>Schreibt mal sauberes C++, dann musst du dich auch nicht mit solch komischem Verhalten herumärgern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1578775</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1578775</guid><dc:creator><![CDATA[Tippgeber]]></dc:creator><pubDate>Mon, 08 Sep 2008 17:23:42 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Methode on Mon, 08 Sep 2008 17:33:29 GMT]]></title><description><![CDATA[<p>Tippgeber schrieb:</p>
<blockquote>
<p>Ist es als 3D-/Spieleprogrammierer eigentlich Pflicht C++ zu vergewaltigen wo es nur geht?</p>
<p>Schreibt mal sauberes C++, dann musst du dich auch nicht mit solch komischem Verhalten herumärgern.</p>
</blockquote>
<p>Das Problem ist, dass die meisten Leute mit 3D Programmierung anfangen bevor sie die Sprache gelernt haben. Nur sind das dann eben 2 enorm komplexe Gebiete die man gleichzeitig lernen muss - da kommt dann halt sowas raus.</p>
<p>Was natuerlich furchtbar ist, weil die meisten Leute so am ende weder das eine noch das andere richtig koennen aber irgendwie dennoch spiele hinnudlen koennen.</p>
<p>Das problem ist aber auch, dass die meiste literatur zu diesem thema einfach nur grottig ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1578785</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1578785</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Mon, 08 Sep 2008 17:33:29 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Methode on Mon, 08 Sep 2008 17:35:57 GMT]]></title><description><![CDATA[<p>@Shade Of Mine: Ich ändere die Variable nicht. Ich speichere sie nur ab, und greife dann darauf zu.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1578787</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1578787</guid><dc:creator><![CDATA[Barney Gumble]]></dc:creator><pubDate>Mon, 08 Sep 2008 17:35:57 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Methode on Mon, 08 Sep 2008 17:41:23 GMT]]></title><description><![CDATA[<p>Barney Gumble schrieb:</p>
<blockquote>
<p>@Shade Of Mine: Ich ändere die Variable nicht. Ich speichere sie nur ab, und greife dann darauf zu.</p>
</blockquote>
<p>Du machst etwas falsch. Das ist Fakt. Die Fehlermeldung deutet daraufhin dass du den Zeiger nicht aenderst sondern nur eine Kopie davon. Irgendwann musst du den Zeiger ja initialisieren, oder?</p>
<p>Aber du solltest auch nicht rumraten oder rumraten lassen, sondern deinen Debugger nehmen und schritt fuer schritt durch den code durchsteppen und immer schauen ob der zeiger den richtigen wert hat.</p>
<p>als kleiner tipp:<br />
du wuerdest dir unendlich viel leichter tun wenn du zuerst die grundlagen lernen wuerdest. denn gerade zeiger sind am anfang nicht ganz trivial zu verstehen und wenn man sie verstanden hat, dann fasst man sie sowieso fast nie wieder roh an...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1578792</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1578792</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Mon, 08 Sep 2008 17:41:23 GMT</pubDate></item></channel></rss>