<?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 beim Ausführen]]></title><description><![CDATA[<p>Hallo,</p>
<p>bekomme einen <strong>Segmentation fault</strong> beim Ausführen des folgenden Codes. Soweit ich weiß kommt dieser Fehler dadurch zustande dass das Programm auf einen Speicherbereich zugreift der nicht ihm gehört. Ich dachte mir zuerst der Fehler kommt durch das Umwandeln von <em>double</em> auf <em>int</em> zustande, da ich int(d) verwende <em>Zeile 32 bzw. 33</em> aber auch umschreiben auf <em>static_cast&lt;int&gt;(d)</em> hat nichts geholfen. Sobald ich den Code in ein XCode Projekt einbinde ist das Ausführen allerdings kein Problem.</p>
<p>Vielen Dank.</p>
<pre><code class="language-cpp">#include&lt;cmath&gt;
#include&lt;fstream&gt;
#include&lt;iostream&gt;
#include&lt;vector&gt;
#include&lt;complex&gt;

using namespace std;

double euler(double u_j0, double u_j10, double u_minj0, double t_step, double x_step) {

	double u_j1;

	u_j1 = u_j0 + t_step/pow(x_step, 2.0) * (u_j10 - 2.0*u_j0 + u_minj0);

	return u_j1;
}

int main(void) {

	double discretesation = 1.0/6.0;
	double x_step = 1.0e-5;
	double eval_point = 0.05;

	double t_step;
	int loop_x, loop_t;

	t_step = pow(x_step, 2.0)/discretesation;
	loop_x = int(1/x_step);
	loop_t = int(eval_point/t_step);

	double u[loop_x][loop_t], u_analytical[loop_x][loop_t];
	double x = 0.0;

	for (int i = 0; i &lt; loop_t; i++) {

		u[0][i] = 0.0;
		u[loop_x-1][i] = 0.0;
	}

	for (int i = 0; i &lt; loop_x; i++) {

		u[i][0] = sin(M_PI*x);
		x = x + x_step;
	}

	double t = 0.0;
	x = 0.0;

	for (int i = 1; i &lt; loop_t; i++) {

		t = t + t_step;

		for (int p = 1; p &lt; loop_x-1; p++) {

			x = x + x_step;
			u[p][i] = euler(u[p][i-1], u[p+1][i-1], u[p-1][i-1], t_step, x_step);
			u_analytical[p][i] = exp(-pow(M_PI, 2.0)*t) * sin(M_PI*x);
		}

		x = 0.0;
	}

	ofstream file1 (&quot;diffusion.txt&quot;);
	ofstream file2 (&quot;exact.txt&quot;);
	x = 0.0;

	for (int i = 0; i &lt; loop_t; i++) {

		for (int p = 0; p &lt; loop_x; p++) {

			file1 &lt;&lt; x &lt;&lt; &quot; &quot; &lt;&lt; u[p][i] &lt;&lt; endl;
			file2 &lt;&lt; x &lt;&lt; &quot; &quot; &lt;&lt; u_analytical[p][i] &lt;&lt; endl;
			x = x + x_step;
		}
		x = 0.0;
	}

	file1.close();
	file2.close();

	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/277063/segmentation-fault-beim-ausführen</link><generator>RSS for Node</generator><lastBuildDate>Wed, 26 Aug 2026 04:23:10 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/277063.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 12 Nov 2010 13:44:45 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Segmentation fault beim Ausführen on Fri, 12 Nov 2010 13:44:45 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>bekomme einen <strong>Segmentation fault</strong> beim Ausführen des folgenden Codes. Soweit ich weiß kommt dieser Fehler dadurch zustande dass das Programm auf einen Speicherbereich zugreift der nicht ihm gehört. Ich dachte mir zuerst der Fehler kommt durch das Umwandeln von <em>double</em> auf <em>int</em> zustande, da ich int(d) verwende <em>Zeile 32 bzw. 33</em> aber auch umschreiben auf <em>static_cast&lt;int&gt;(d)</em> hat nichts geholfen. Sobald ich den Code in ein XCode Projekt einbinde ist das Ausführen allerdings kein Problem.</p>
<p>Vielen Dank.</p>
<pre><code class="language-cpp">#include&lt;cmath&gt;
#include&lt;fstream&gt;
#include&lt;iostream&gt;
#include&lt;vector&gt;
#include&lt;complex&gt;

using namespace std;

double euler(double u_j0, double u_j10, double u_minj0, double t_step, double x_step) {

	double u_j1;

	u_j1 = u_j0 + t_step/pow(x_step, 2.0) * (u_j10 - 2.0*u_j0 + u_minj0);

	return u_j1;
}

int main(void) {

	double discretesation = 1.0/6.0;
	double x_step = 1.0e-5;
	double eval_point = 0.05;

	double t_step;
	int loop_x, loop_t;

	t_step = pow(x_step, 2.0)/discretesation;
	loop_x = int(1/x_step);
	loop_t = int(eval_point/t_step);

	double u[loop_x][loop_t], u_analytical[loop_x][loop_t];
	double x = 0.0;

	for (int i = 0; i &lt; loop_t; i++) {

		u[0][i] = 0.0;
		u[loop_x-1][i] = 0.0;
	}

	for (int i = 0; i &lt; loop_x; i++) {

		u[i][0] = sin(M_PI*x);
		x = x + x_step;
	}

	double t = 0.0;
	x = 0.0;

	for (int i = 1; i &lt; loop_t; i++) {

		t = t + t_step;

		for (int p = 1; p &lt; loop_x-1; p++) {

			x = x + x_step;
			u[p][i] = euler(u[p][i-1], u[p+1][i-1], u[p-1][i-1], t_step, x_step);
			u_analytical[p][i] = exp(-pow(M_PI, 2.0)*t) * sin(M_PI*x);
		}

		x = 0.0;
	}

	ofstream file1 (&quot;diffusion.txt&quot;);
	ofstream file2 (&quot;exact.txt&quot;);
	x = 0.0;

	for (int i = 0; i &lt; loop_t; i++) {

		for (int p = 0; p &lt; loop_x; p++) {

			file1 &lt;&lt; x &lt;&lt; &quot; &quot; &lt;&lt; u[p][i] &lt;&lt; endl;
			file2 &lt;&lt; x &lt;&lt; &quot; &quot; &lt;&lt; u_analytical[p][i] &lt;&lt; endl;
			x = x + x_step;
		}
		x = 0.0;
	}

	file1.close();
	file2.close();

	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1979467</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1979467</guid><dc:creator><![CDATA[Poolshark]]></dc:creator><pubDate>Fri, 12 Nov 2010 13:44:45 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation fault beim Ausführen on Fri, 12 Nov 2010 13:55:12 GMT]]></title><description><![CDATA[<p>Lass dir doch mal loop_x und loop_t ausgeben, und schau ob du überhaupt so viel Speicher hast.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1979470</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1979470</guid><dc:creator><![CDATA[l&#x27;abra d&#x27;or]]></dc:creator><pubDate>Fri, 12 Nov 2010 13:55:12 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation fault beim Ausführen on Fri, 12 Nov 2010 13:55:52 GMT]]></title><description><![CDATA[<p>Mal ne dumme Frage, aber welcher Compiler erlaubt dir diesen FALSCHEN Code (außer Dev cpp)?</p>
<pre><code class="language-cpp">int loop_x, loop_t;

loop_x = int(1/x_step);
loop_t = int(eval_point/t_step);

double u[loop_x][loop_t], u_analytical[loop_x][loop_t];
</code></pre>
<p>Das darfst du nicht machen. Ein Array muss immer mit constanten variablen initialisiert werden! Alternative mit new Speicher reservieren...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1979472</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1979472</guid><dc:creator><![CDATA[HighLigerBiMBam]]></dc:creator><pubDate>Fri, 12 Nov 2010 13:55:52 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation fault beim Ausführen on Fri, 12 Nov 2010 13:57:50 GMT]]></title><description><![CDATA[<p>Selbst wenn du so viel Speicher hast(was gut sein kann): Das liegt alles auf dem Stack und wird ihn dir sprengen! Benutz dynamische Speicherverwaltung, also std::vector oder, falls du automasochistisch veranlagt bist, new/delete.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1979473</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1979473</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 12 Nov 2010 13:57:50 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation fault beim Ausführen on Fri, 12 Nov 2010 13:58:31 GMT]]></title><description><![CDATA[<p>HighLigerBiMBam schrieb:</p>
<blockquote>
<p>Mal ne dumme Frage, aber welcher Compiler erlaubt dir diesen FALSCHEN Code (außer Dev cpp)?</p>
</blockquote>
<p>Ein C++-Compiler, der Teile von C99 unterstützt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1979475</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1979475</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Fri, 12 Nov 2010 13:58:31 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation fault beim Ausführen on Fri, 12 Nov 2010 13:59:43 GMT]]></title><description><![CDATA[<p>HighLigerBiMBam schrieb:</p>
<blockquote>
<p>Das darfst du nicht machen. Ein Array muss immer mit constanten variablen initialisiert werden! Alternative mit new Speicher reservieren...</p>
</blockquote>
<p>Das hat zum Beispiel der g++ als Feature, hat was mit C99 zu tun, welches der gcc ohnehin unterstützt, da wäre es doch doof dies bei g++ auszuschalten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1979477</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1979477</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 12 Nov 2010 13:59:43 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation fault beim Ausführen on Fri, 12 Nov 2010 13:59:59 GMT]]></title><description><![CDATA[<p>Michael E. schrieb:</p>
<blockquote>
<p>HighLigerBiMBam schrieb:</p>
<blockquote>
<p>Mal ne dumme Frage, aber welcher Compiler erlaubt dir diesen FALSCHEN Code (außer Dev cpp)?</p>
</blockquote>
<p>Ein C++-Compiler, der Teile von C99 unterstützt?</p>
</blockquote>
<p>Das gehört verboten <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>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1979478</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1979478</guid><dc:creator><![CDATA[HighLigerBiMBam]]></dc:creator><pubDate>Fri, 12 Nov 2010 13:59:59 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation fault beim Ausführen on Fri, 12 Nov 2010 14:17:13 GMT]]></title><description><![CDATA[<blockquote>
<p>Lass dir doch mal loop_x und loop_t ausgeben, und schau ob du überhaupt so viel Speicher hast.</p>
</blockquote>
<p>Danke! Daran hab ich natürlich nicht gedacht...</p>
<blockquote>
<p>Benutz dynamische Speicherverwaltung, also std::vector</p>
</blockquote>
<p>An einen Vector habe ich zuerst auch gedacht allerdings weiß ich nicht wie ich einen 2 dimensionalen Vector definieren kann!?<br />
Ich bitte meine Unwissenheit zu entschuldigen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1979490</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1979490</guid><dc:creator><![CDATA[Poolshark]]></dc:creator><pubDate>Fri, 12 Nov 2010 14:17:13 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation fault beim Ausführen on Fri, 12 Nov 2010 14:28:20 GMT]]></title><description><![CDATA[<p>Poolshark schrieb:</p>
<blockquote>
<p>An einen Vector habe ich zuerst auch gedacht allerdings weiß ich nicht wie ich einen 2 dimensionalen Vector definieren kann!?<br />
Ich bitte meine Unwissenheit zu entschuldigen...</p>
</blockquote>
<p><code>vector&lt;vector&lt;was_ein_typ_auch_immer&gt; &gt;</code><br />
Stolpersteine:<br />
- Die letzten beiden &gt; müssen durch ein Leerzeichen getrennt sein, sonst erkennt der Compiler dort den Operator <code>&gt;&gt;</code> .</p>
<p>- Denk daran dass in den äußeren <code>vector</code> Elemente vom Typ <code>vector&lt;was_ein_typ_auch_immer&gt;</code> gehören! Und die musst du da auch irgendwie reinpacken, bevor du das benutzen kannst.</p>
<p>Ansonsten eigentlich genau wie immer. Das woran man als Anfänger meistens nicht denkt ist, dass die vectoren natürlich zuerst irgendwie gefüllt werden wollen, bevor man sie benutzen kann. Ob dies durch push_back, resize oder direkt durch Benutzung des passenden Konstruktors geschieht (oder auf eine der anderen zahlreichen Arten und Weisen) hängt von deinem Einsatzzweck ab. Du willst vermutlich etwas direkt im Konstruktor:<br />
<code>vector&lt;vector&lt;double&gt; &gt; foo(loop_x, vector&lt;double&gt;(loop_y));</code></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1979495</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1979495</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 12 Nov 2010 14:28:20 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation fault beim Ausführen on Fri, 12 Nov 2010 14:45:38 GMT]]></title><description><![CDATA[<blockquote>
<p>vector&lt;vector&lt;double&gt; &gt; foo(loop_x, vector&lt;double&gt;(loop_y));</p>
</blockquote>
<p>Vielen, vielen Dank! Das war genau das was ich suchte! Hat mir einiges an Kopfzerbrechen erspart!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1979506</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1979506</guid><dc:creator><![CDATA[Poolshark]]></dc:creator><pubDate>Fri, 12 Nov 2010 14:45:38 GMT</pubDate></item></channel></rss>