<?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[Komisches Verhalten von Arrays, die eigentlich eine andere Größe haben]]></title><description><![CDATA[<p>Kann mir bitte jemand dieses Phänomen erklären? Ich habe ein Array, das eigentlich 200 Einheiten hat. Allerdings kann ich das Array auch 300 Einheiten groß Anzeigen lassen oder je nach dem auch noch in wesentlich größeren Einheiten. Was genau passiert dort, wenn ich die eigentliche Array Größe überschreite?</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;stdio.h&gt;
#include &lt;conio.h&gt;
#include &lt;time.h&gt;
#include &lt;windows.h&gt;

using namespace std;

int main()
{
	int array[100][2];

	int i, j;
	int l = 0;
    for(i = 0; i &lt; 100 ; i++)
    {
        for(j = 0; j &lt; 2; j++)
        {
			array[i][j] = rand() % 5 + 1;
			printf(&quot;Nr. %d Array1 so wies gehoert[%d][%d] ist %d\n&quot;, l, i, j, array[i][j]);
			l++;

			Sleep(10);
		}
	}
cout &lt;&lt; &quot;Durchlaeufe l: &quot;&lt;&lt; l;
	cout &lt;&lt; &quot;\n\n\n\n&quot;;

	int a, b;
	int c = 0;
    for(a = 0; a &lt; 100 ; a++)
    {
        for(b = 0; b &lt; 3; b++)
        {

			printf(&quot;Nr. %d Array[%d][%d] ist %d\n&quot;, c, a, b, array[a][b]);
	c++;
	Sleep(10);
		}
	}
	cout &lt;&lt; &quot;Durchlaeufe c: &quot;&lt;&lt; c;
	_getch();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/335943/komisches-verhalten-von-arrays-die-eigentlich-eine-andere-größe-haben</link><generator>RSS for Node</generator><lastBuildDate>Mon, 20 Apr 2026 00:25:57 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/335943.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 21 Dec 2015 23:03:01 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Komisches Verhalten von Arrays, die eigentlich eine andere Größe haben on Mon, 21 Dec 2015 23:03:01 GMT]]></title><description><![CDATA[<p>Kann mir bitte jemand dieses Phänomen erklären? Ich habe ein Array, das eigentlich 200 Einheiten hat. Allerdings kann ich das Array auch 300 Einheiten groß Anzeigen lassen oder je nach dem auch noch in wesentlich größeren Einheiten. Was genau passiert dort, wenn ich die eigentliche Array Größe überschreite?</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;stdio.h&gt;
#include &lt;conio.h&gt;
#include &lt;time.h&gt;
#include &lt;windows.h&gt;

using namespace std;

int main()
{
	int array[100][2];

	int i, j;
	int l = 0;
    for(i = 0; i &lt; 100 ; i++)
    {
        for(j = 0; j &lt; 2; j++)
        {
			array[i][j] = rand() % 5 + 1;
			printf(&quot;Nr. %d Array1 so wies gehoert[%d][%d] ist %d\n&quot;, l, i, j, array[i][j]);
			l++;

			Sleep(10);
		}
	}
cout &lt;&lt; &quot;Durchlaeufe l: &quot;&lt;&lt; l;
	cout &lt;&lt; &quot;\n\n\n\n&quot;;

	int a, b;
	int c = 0;
    for(a = 0; a &lt; 100 ; a++)
    {
        for(b = 0; b &lt; 3; b++)
        {

			printf(&quot;Nr. %d Array[%d][%d] ist %d\n&quot;, c, a, b, array[a][b]);
	c++;
	Sleep(10);
		}
	}
	cout &lt;&lt; &quot;Durchlaeufe c: &quot;&lt;&lt; c;
	_getch();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2480361</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2480361</guid><dc:creator><![CDATA[Array1234]]></dc:creator><pubDate>Mon, 21 Dec 2015 23:03:01 GMT</pubDate></item><item><title><![CDATA[Reply to Komisches Verhalten von Arrays, die eigentlich eine andere Größe haben on Mon, 21 Dec 2015 23:27:09 GMT]]></title><description><![CDATA[<p>Array1234 schrieb:</p>
<blockquote>
<p>Was genau passiert dort, wenn ich die eigentliche Array Größe überschreite?</p>
</blockquote>
<p>Du liest wild im Speicher rum, der sich dort halt zufällig befindet. Mit Glück crashed sowas irgendwann. Mit Pech nicht und der Fehler bleibt unbemerkt. Noch besser wird's, wenn du nicht nur liest, sondern schreibst, dann hast du dir einen <a href="https://en.wikipedia.org/wiki/Buffer_overflow" rel="nofollow">Buffer Overrun</a> gebastelt...</p>
<p>Du darfst nur auf Elemente eines Array zugreifen, die es auch wirklich gibt. Es obliegt deiner eigenen Verantwortung, dich daran zu halten; der Compiler wird dich nicht daran hindern, was falsch zu machen; Willkommen in C++ <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="😉"
    /> Sobald du außerhalb eines Arrays herumfuhrwerkst, hast du sog. <a href="https://en.wikipedia.org/wiki/Undefined_behavior" rel="nofollow">undefiniertes Verhalten</a>.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2480362</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2480362</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Mon, 21 Dec 2015 23:27:09 GMT</pubDate></item><item><title><![CDATA[Reply to Komisches Verhalten von Arrays, die eigentlich eine andere Größe haben on Mon, 21 Dec 2015 23:24:59 GMT]]></title><description><![CDATA[<p>Arrayzugriffe werden nicht auf Gültigkeit des Index geprüft. Liegt der Index außerhalb des Arrays, dann ist das Verhalten undefiniert. Das heißt, prinzipiell dürfte alles mögliche passieren, der Computer könnte beispielsweise deine Katze schwängern und das Geschirr spülen (außerdem ist dein Hund nun eine Katze).</p>
<p>In der Praxis wird das Programm in der Regel einfach versuchen auf den Arbeitsspeicher hinter dem Array zuzugreifen. Was entweder völlig unspektakulär gelingen kann (das ist das, was du hier beobachtest) oder oft auch nicht (dann stürzt das Programm mit einer Zugriffsverletzung ab).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2480363</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2480363</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 21 Dec 2015 23:24:59 GMT</pubDate></item><item><title><![CDATA[Reply to Komisches Verhalten von Arrays, die eigentlich eine andere Größe haben on Mon, 21 Dec 2015 23:28:24 GMT]]></title><description><![CDATA[<p>Wobei sein Fall mit dem zweidimensionalen Array etwas speziell ist. Wenn man ein <code>int array[100][2]</code> an Position <code>array[x][3]</code> ließt würde ich den Wert von Position <code>array[x+1][0]</code> erwarten. Bin mir aber nicht sicher ob das garantiert ist... Absichtlich machen würde ich sowas jedenfalls nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2480364</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2480364</guid><dc:creator><![CDATA[sebi707]]></dc:creator><pubDate>Mon, 21 Dec 2015 23:28:24 GMT</pubDate></item><item><title><![CDATA[Reply to Komisches Verhalten von Arrays, die eigentlich eine andere Größe haben on Mon, 21 Dec 2015 23:42:03 GMT]]></title><description><![CDATA[<p>sebi707 schrieb:</p>
<blockquote>
<p>Wobei sein Fall mit dem zweidimensionalen Array etwas speziell ist. Wenn man ein <code>int array[100][2]</code> an Position <code>array[x][3]</code> ließt würde ich den Wert von Position <code>array[x+1][0]</code> erwarten. Bin mir aber nicht sicher ob das garantiert ist...</p>
</blockquote>
<p>Nö, das ist undefiniertes Verhalten, all bets are off. Es wird in der Regel effektiv einfach auf das Element <code>array[x+1][0]</code> zugreifen, ja (weil die Adressberechnung mit den Inputs halt die entsprechende Adresse liefert), aber es könnte genausogut crashen, 42 liefern oder bedeuten, dass du Dienstag abends um 21:03 eine Lieferung Bleistiftspitzer bekommst...</p>
<p>Im Allgemeinen ist es in C++ bereits undefiniertes Verhalten, die Adresse eines nicht existierenden Arrayelements überhaupt auch nur auszurechnen (einzige Ausnahme ist das erste Element hinter dem letzen, C++ garantiert, dass du einen Pointer auf dieses ausrechnen kannst, dereferenzieren darfst du den aber selbstverständlich nicht).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2480365</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2480365</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Mon, 21 Dec 2015 23:42:03 GMT</pubDate></item><item><title><![CDATA[Reply to Komisches Verhalten von Arrays, die eigentlich eine andere Größe haben on Tue, 22 Dec 2015 00:14:02 GMT]]></title><description><![CDATA[<p>Ich wollte mal das Monty Hall Problem in C++ beweisen. Dadurch bin ich auf die Array Problematik gestoßen. Dann kann ich meinen Code wohl über den Haufen werfen. Lässt sich zwar prima kompelieren aber ist halt nunmal flasch. Weiß jemand sonst, wie ich das hinbekommen könnte?</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;stdio.h&gt;
#include &lt;conio.h&gt;
#include &lt;time.h&gt;
#include &lt;windows.h&gt;

using namespace std;
 int Tueren[100][3];
 int MeineErstwahl[1000];
 int ModeratorKannTuereAufdecken[100][2];
 int ModeratorDecktTuereAuf[100][2];

int main()
{
 srand(time(NULL));
 //Inizialisiert Türen
    int i, j;
    for(i = 0; i &lt; 100 ; i++)
    {
        for(j = 0; j &lt; 3; j++)
        {
            Tueren[i][j] = rand() % 3 + 1;
        }
    }

	// Macht das jede Dreierreihe drei unterschiedliche Zahlen hat
	int h, k;
    for(h = 0; h &lt; 100 ; h++)
    {
        for(k = 0; k &lt; 3; k++)
        {
            while(Tueren[h][k] == Tueren[h][k+1])
			{
				Tueren[h][k+1] = rand() % 3 + 1;
			}
			while(Tueren[h][k] == Tueren[h][k+2] || Tueren[h][k + 1] == Tueren[h][k+2])
			{
				Tueren[h][k+2] = rand() % 3 + 1;
			}
        }
    }

	// Inizialiesiert die Türe, die ich zuerst wähle

	int z;
	for(z = 0; z &lt; 100; z++)
    {
		MeineErstwahl[z] = rand() % 3 + 1;
    }

	// Inizialisiert, welche Türen der Moderator zuerst öffnen kann!

	int o, p;
	int q = 0;
	for(o = 0; o &lt; 100; o++)
    {
        for(p = 0; p &lt; 3; p++)
        {
			if((Tueren[o][p] != 1) &amp;&amp; (Tueren[o][p] != MeineErstwahl[o]))
			{
				ModeratorKannTuereAufdecken[o][q] = Tueren[o][p];

				if(q == 0)
				{
					q++;
				}

			}
		}
		q--;
    }

int u, t;

for(u = 0; u &lt; 100; u++)
{
	for(t = 0; t &lt; 2; t++)
	{
		if((ModeratorKannTuereAufdecken[u][t] != 0) &amp;&amp; (ModeratorKannTuereAufdecken[u][t + 1] != 0))
		{
			int n;
			n = rand() % 2 + 4;

				if(n == 4)
				{
					ModeratorDecktTuereAuf[u][t] = ModeratorKannTuereAufdecken[u][t];
					ModeratorDecktTuereAuf[u][t + 1] = 0;
				}
				if(n == 5)
				{
					ModeratorDecktTuereAuf[u][t + 1] = ModeratorKannTuereAufdecken[u][t];
					ModeratorDecktTuereAuf[u][t] = 0;
				}

		}
	}

}

int a, b;
for(a = 0; a &lt; 100; a++)
{
        for(b = 0; b &lt; 3; b++)
        {
            printf(&quot;Tueren[%d][%d] = %d\n&quot;, a,b,Tueren[a][b]);
			Sleep(1);
        }
		printf(&quot;Meine Erstwahl ist: %d\n&quot;,  MeineErstwahl[a]);
		printf(&quot;Moderator kann Tuere aufdecken: %d\n&quot;, ModeratorKannTuereAufdecken[a][b-3]);
		printf(&quot;Moderator kann Tuere aufdecken: %d\n&quot;, ModeratorKannTuereAufdecken[a][b-2]); 

		printf(&quot;Moderator deckt Tuere auf: %d\n&quot;, ModeratorDecktTuereAuf[a][b-3]);
		printf(&quot;Moderator deckt Tuere auf: %d\n\n&quot;, ModeratorDecktTuereAuf[a][b-3]);
}

    _getch();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2480369</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2480369</guid><dc:creator><![CDATA[Array1234]]></dc:creator><pubDate>Tue, 22 Dec 2015 00:14:02 GMT</pubDate></item><item><title><![CDATA[Reply to Komisches Verhalten von Arrays, die eigentlich eine andere Größe haben on Tue, 22 Dec 2015 00:19:14 GMT]]></title><description><![CDATA[<p>Array1234 schrieb:</p>
<blockquote>
<p>Weiß jemand sonst, wie ich das hinbekommen könnte?</p>
</blockquote>
<p>Beispielsweise, indem du Code schreibst, der nicht über Arraygrenzen hinaus zugreift? Zwingt dich doch niemand dazu.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2480371</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2480371</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 22 Dec 2015 00:19:14 GMT</pubDate></item></channel></rss>