<?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[Absturz bei Freigabe von Speicher]]></title><description><![CDATA[<p>Hallo liebes Forum,</p>
<p>ich hab ein Problem mit folgendem Programm:</p>
<pre><code class="language-cpp">void leseAusZeus(char *dateinameQuelle, int xBereich, int zStart, int zEnde, int tBereich, int takt, float ***aaafErgebnisse){
	// Notwendig zum nutzen der UTzeusviGetRawData-Funktion
	int *aiPosition = new int [xBereich];
	float **aafAmplitude;
	aafAmplitude = new float* [xBereich];
	for(int x = 0; x &lt;xBereich; x++){
		aafAmplitude[x] = new float [tBereich];
		for(int t = 0; t &lt; tBereich; t++){
			aafAmplitude[x][t] = 0.0f;
		}
	}
	if((takt &gt; 3) || (takt &lt; 0))
		std::cout &lt;&lt; &quot;Fehler&quot; &lt;&lt; std::endl;
	else{
		for(int iz = 0; iz &lt; (zEnde - zStart); iz++){
			UTzeusviGetRawData(dateinameQuelle, 0, xBereich, &amp;aiPosition[0], zStart + iz, 0, takt, tBereich, &amp;aafAmplitude[0][0]);
			for(int ix = 0; ix &lt; xBereich; ix++){
				for(int zeit = 0; zeit &lt; tBereich; zeit++){
					aaafErgebnisse[ix][iz][zeit] = aafAmplitude[ix][zeit];
				}
			}
		}
	}
	delete[] aiPosition;
	for(int x = 0; 0 &lt; xBereich; x++)
		delete[] aafAmplitude[x];
	delete[] aafAmplitude;
}
</code></pre>
<p>und zwar wird mir beim Debuggen an Zeile 26 gesagt, dass versucht wird in geschützten Speicher zu schreiben und das Programm stürzt ab. Zwischendurch wurde mit Hilfe der Funktion UTzeusviGetRawData eine zweidimensionales Feld (aafAmplitude) aus einer Datei geladen und dem dreidimensionalen Feld (aaafErgebnisse) übergeben.</p>
<p>Kann mir jemand sagen, warum ich den Speicher nicht freigeben kann?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/236593/absturz-bei-freigabe-von-speicher</link><generator>RSS for Node</generator><lastBuildDate>Wed, 23 Sep 2026 20:19:05 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/236593.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 17 Mar 2009 12:56:37 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Absturz bei Freigabe von Speicher on Tue, 17 Mar 2009 12:56:37 GMT]]></title><description><![CDATA[<p>Hallo liebes Forum,</p>
<p>ich hab ein Problem mit folgendem Programm:</p>
<pre><code class="language-cpp">void leseAusZeus(char *dateinameQuelle, int xBereich, int zStart, int zEnde, int tBereich, int takt, float ***aaafErgebnisse){
	// Notwendig zum nutzen der UTzeusviGetRawData-Funktion
	int *aiPosition = new int [xBereich];
	float **aafAmplitude;
	aafAmplitude = new float* [xBereich];
	for(int x = 0; x &lt;xBereich; x++){
		aafAmplitude[x] = new float [tBereich];
		for(int t = 0; t &lt; tBereich; t++){
			aafAmplitude[x][t] = 0.0f;
		}
	}
	if((takt &gt; 3) || (takt &lt; 0))
		std::cout &lt;&lt; &quot;Fehler&quot; &lt;&lt; std::endl;
	else{
		for(int iz = 0; iz &lt; (zEnde - zStart); iz++){
			UTzeusviGetRawData(dateinameQuelle, 0, xBereich, &amp;aiPosition[0], zStart + iz, 0, takt, tBereich, &amp;aafAmplitude[0][0]);
			for(int ix = 0; ix &lt; xBereich; ix++){
				for(int zeit = 0; zeit &lt; tBereich; zeit++){
					aaafErgebnisse[ix][iz][zeit] = aafAmplitude[ix][zeit];
				}
			}
		}
	}
	delete[] aiPosition;
	for(int x = 0; 0 &lt; xBereich; x++)
		delete[] aafAmplitude[x];
	delete[] aafAmplitude;
}
</code></pre>
<p>und zwar wird mir beim Debuggen an Zeile 26 gesagt, dass versucht wird in geschützten Speicher zu schreiben und das Programm stürzt ab. Zwischendurch wurde mit Hilfe der Funktion UTzeusviGetRawData eine zweidimensionales Feld (aafAmplitude) aus einer Datei geladen und dem dreidimensionalen Feld (aaafErgebnisse) übergeben.</p>
<p>Kann mir jemand sagen, warum ich den Speicher nicht freigeben kann?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1681469</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1681469</guid><dc:creator><![CDATA[StinkePunk]]></dc:creator><pubDate>Tue, 17 Mar 2009 12:56:37 GMT</pubDate></item><item><title><![CDATA[Reply to Absturz bei Freigabe von Speicher on Tue, 17 Mar 2009 13:05:48 GMT]]></title><description><![CDATA[<p>Hallo,<br />
deine Schleife in zeile 25 ist eine Endlosschleife!<br />
Vergleiche mal Zeile 25 mit Zeile 6, dann wird dir ein kleiner Unterschied auffallen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1681482</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1681482</guid><dc:creator><![CDATA[MiP]]></dc:creator><pubDate>Tue, 17 Mar 2009 13:05:48 GMT</pubDate></item><item><title><![CDATA[Reply to Absturz bei Freigabe von Speicher on Tue, 17 Mar 2009 13:14:03 GMT]]></title><description><![CDATA[<p>Das geht schon so. Wenn auf Schleifen, if-Bedinungen etc. nur eine Anweisung folgt, kann auf die Klammern verzichtet werden. Die Fehlermeldung kommt auch schon bei x = 0. Der Vollständigkeit halber hab ich mal die Klammern in meinem Programm hinzu gefügt und wie erwartet kam die Fehlermeldung an der selben Stelle.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1681487</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1681487</guid><dc:creator><![CDATA[StinkePunk]]></dc:creator><pubDate>Tue, 17 Mar 2009 13:14:03 GMT</pubDate></item><item><title><![CDATA[Reply to Absturz bei Freigabe von Speicher on Tue, 17 Mar 2009 13:21:45 GMT]]></title><description><![CDATA[<p>Das meinet er nicht. Du hast da</p>
<pre><code class="language-cpp">for(int x = 0; 0 &lt; xBereich; x++)
</code></pre>
<p>stehen, aber du willst da</p>
<pre><code class="language-cpp">for(int x = 0; x &lt; xBereich; x++)
</code></pre>
<p>stehen haben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1681495</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1681495</guid><dc:creator><![CDATA[Fusel.Factor]]></dc:creator><pubDate>Tue, 17 Mar 2009 13:21:45 GMT</pubDate></item><item><title><![CDATA[Reply to Absturz bei Freigabe von Speicher on Tue, 17 Mar 2009 14:04:00 GMT]]></title><description><![CDATA[<p><div class="plugin-markdown"><input type="checkbox" id="checkbox3023" checked="true" /><label for="checkbox3023">(x = 0) hebt das Programm den Arsch hoch.</label></div></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1681538</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1681538</guid><dc:creator><![CDATA[StinkePunk]]></dc:creator><pubDate>Tue, 17 Mar 2009 14:04:00 GMT</pubDate></item><item><title><![CDATA[Reply to Absturz bei Freigabe von Speicher on Tue, 17 Mar 2009 14:33:59 GMT]]></title><description><![CDATA[<p>Kommentier mal den Bereich von Zeile 12 bis 23 aus.<br />
Wenns nun läuft, liegt der Fehler wohl in diesem Abschnitt, vermutlich der Dreifachpointer.<br />
Vorausgesetzt Zeile 25 sieht nun tatsächlich so aus:</p>
<pre><code class="language-cpp">for(int x = 0; x &lt; xBereich; x++)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1681564</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1681564</guid><dc:creator><![CDATA[MiP]]></dc:creator><pubDate>Tue, 17 Mar 2009 14:33:59 GMT</pubDate></item><item><title><![CDATA[Reply to Absturz bei Freigabe von Speicher on Tue, 17 Mar 2009 15:06:58 GMT]]></title><description><![CDATA[<p>Ja, ohne den Abschnitt funktioniert es. Es reicht auch schon Zeile 16 weg zu lassen, aber das hilft mir nicht weiter. Die Funktion UTzeusviGetRawData liegt in einer dll und mehr als ihre grobe funktionsweise ist mir nicht bekannt.<br />
Ich verstehe nicht, wieso ich auf einmal nicht mehr den Speicher freigeben kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1681579</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1681579</guid><dc:creator><![CDATA[StinkePunk]]></dc:creator><pubDate>Tue, 17 Mar 2009 15:06:58 GMT</pubDate></item><item><title><![CDATA[Reply to Absturz bei Freigabe von Speicher on Tue, 17 Mar 2009 15:22:03 GMT]]></title><description><![CDATA[<p>Wie äußert sich denn der Fehler? Hängt sich das Programm auf, oder wird eine Exception geworfen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1681601</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1681601</guid><dc:creator><![CDATA[Fusel.Factor]]></dc:creator><pubDate>Tue, 17 Mar 2009 15:22:03 GMT</pubDate></item><item><title><![CDATA[Reply to Absturz bei Freigabe von Speicher on Tue, 17 Mar 2009 15:22:31 GMT]]></title><description><![CDATA[<p>Womöglich wurde in <code>UTzeusviGetRawData</code> über die Speichergrenzen hinaus geschrieben. Dadurch gab es eine Heap-Korruption und es wird undefiniertes Verhalten ausgelöst, was schlussendlich zu einem Absturz bei der Speicherfreigabe führt. Bist du sicher, dass du <code>UTzeusviGetRawData</code> richtig verwendest?</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1681602</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1681602</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Tue, 17 Mar 2009 15:22:31 GMT</pubDate></item><item><title><![CDATA[Reply to Absturz bei Freigabe von Speicher on Tue, 17 Mar 2009 15:56:12 GMT]]></title><description><![CDATA[<p>@ Fusel Factor: Ja, ich bekomme eine System::AccessViolationException.<br />
@ Dravere: So viel ich weiß ja. Wenn ich ein festes Array definiere funktioniert es auch, nur leider weiß ich die benötigte Größe für das Array nicht von vorn herein. Diese Methode ist am Ende auch wieder Teil einer dll. Für den Fall, dass in UTzeusviGetRawData über die Grenzen hinaus geschrieben wird, hab ich es mal mit einem wesentlich größeren Array versucht als darin eigentlich benötigt wird, aber es funktioniert trotzdem nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1681630</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1681630</guid><dc:creator><![CDATA[StinkePunk]]></dc:creator><pubDate>Tue, 17 Mar 2009 15:56:12 GMT</pubDate></item><item><title><![CDATA[Reply to Absturz bei Freigabe von Speicher on Tue, 17 Mar 2009 16:03:58 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">UTzeusviGetRawData(..., ..., ..., ..., ..., ..., ..., ..., &amp;aafAmplitude[0][0]);
</code></pre>
<p><code>UTzeusviGetRawData</code> erwartet nicht zufällig ein eindimensionales Array als letzten Parameter? Oder zumindest eine Speicherstruktur, die linear im Speicher liegt?<br />
Dein dynamisch aufgebautes Array liegt nämlich wild im Speicher verteilt. Soll heißen: <code>aafAmplitude[1][0]</code> liegt nicht zwangsläufig direkt hinter <code>aafAmplitude[0][tBereich-1]</code> sondern u.U. an einer völlig anderen Stelle.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1681632</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1681632</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Tue, 17 Mar 2009 16:03:58 GMT</pubDate></item><item><title><![CDATA[Reply to Absturz bei Freigabe von Speicher on Tue, 17 Mar 2009 16:02:49 GMT]]></title><description><![CDATA[<p>Also ich gehe davon aus, dass UTzeusviGetRawData einen Zeiger auf ein komptaktes 2-D Array erwartet als letztes Argument und darum der Aufruf mit einem dynamischen 2-D-Array (welches überall im Speicher verteilt liegt oder zumindest noch die array-counts dazwischen liegen) fehlschlägt. Dann würden diese internen Zähler nämlich überschrieben und delete[] könnte das falsche tun.<br />
Aber ist nur meine Theorie, ich kenne die Funktion ja nicht.</p>
<p>Viele Grüße,<br />
Michael</p>
<p>PS: Tachyon war irgendwie schneller <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/1681633</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1681633</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 17 Mar 2009 16:02:49 GMT</pubDate></item><item><title><![CDATA[Reply to Absturz bei Freigabe von Speicher on Tue, 17 Mar 2009 16:07:08 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/4465">@Tachyon</a> und <a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/34233">@Decimad</a>: Genau so sei es gewesen. Tausend Dank für eure Hilfe!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1681637</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1681637</guid><dc:creator><![CDATA[StinkePunk]]></dc:creator><pubDate>Tue, 17 Mar 2009 16:07:08 GMT</pubDate></item></channel></rss>