<?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[Was begrenzt die Größe eines Arrays als Membervariable?]]></title><description><![CDATA[<p>Hallo allerseits!</p>
<p>Folgendes Phänomen:</p>
<p>Ein großes Array als globale Variable</p>
<pre><code class="language-cpp">float g_fwert[2000][2000];
</code></pre>
<p>bereitet keine Probleme, dasselbe als Membervariable</p>
<pre><code class="language-cpp">class egal 
{
... public: float m_fwert[2000][2000];
...
}
</code></pre>
<p>führt dazu, dass das Programm beim Ausführen sofort abstürzt mit folgender Meldung:</p>
<blockquote>
<p>Unhandled exception at 0x00617457 in programmname.exe: 0xC00000FD: Stack overflow.</p>
</blockquote>
<p>Der Debugger zeigt dabei auf Zeile 99 von chkstk.asm:</p>
<pre><code class="language-cpp">; Find next lower page and probe
cs20:
        sub     eax, _PAGESIZE_         ; decrease by PAGESIZE
        test    dword ptr [eax],eax     ; probe page. // &lt;- Das ist Zeile 99
        jmp     short cs10
</code></pre>
<p><strong>Versteht das jemand?<br />
Und wie könnte man diese Problem vermeiden / umgehen?</strong></p>
<p>Ich jedenfalls kann mir bis jetzt zwei Workarounds vorstellen:</p>
<p>1. Workaround:<br />
Vektor statt 2D-Array.<br />
Vorteil: Programm funktioniert, Größe flexibel<br />
Nachteile:<br />
- Der Vektor der Größe [2000*2000] beanprucht laut Taskmanager aber deutlich mehr RAM als das [2000][2000] Array.<br />
- Mini-Umrechungsfunktion von 2D-Koordinaten nach 1D-Vektor Position nötig. Schluckt bestimmt ein bisschen Zeit....</p>
<p>2. Workaround:<br />
Folgendes konnte ich noch nicht ausprobieren, aber mir vorstellen:<br />
[2000][2000] Array als globale Variable und einen Zeiger als Membervariable darauf.<br />
Bloß:<br />
Funktioniert das? und:<br />
Wie greift man per Zeiger auf ein 2D-Array zu? Bei einem 1D-Array ist mir das klar, aber bei einem 2D....?</p>
<p><strong>Wie bewertet Ihr die Workarounds? Gibt es sonstige Alternativen (falls ein Workaround überhaupt notwendig ist...)</strong></p>
<p>Danke und Gruß!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/152769/was-begrenzt-die-größe-eines-arrays-als-membervariable</link><generator>RSS for Node</generator><lastBuildDate>Mon, 07 Sep 2026 02:47:11 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/152769.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 09 Jul 2006 19:10:38 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Was begrenzt die Größe eines Arrays als Membervariable? on Sun, 09 Jul 2006 19:10:38 GMT]]></title><description><![CDATA[<p>Hallo allerseits!</p>
<p>Folgendes Phänomen:</p>
<p>Ein großes Array als globale Variable</p>
<pre><code class="language-cpp">float g_fwert[2000][2000];
</code></pre>
<p>bereitet keine Probleme, dasselbe als Membervariable</p>
<pre><code class="language-cpp">class egal 
{
... public: float m_fwert[2000][2000];
...
}
</code></pre>
<p>führt dazu, dass das Programm beim Ausführen sofort abstürzt mit folgender Meldung:</p>
<blockquote>
<p>Unhandled exception at 0x00617457 in programmname.exe: 0xC00000FD: Stack overflow.</p>
</blockquote>
<p>Der Debugger zeigt dabei auf Zeile 99 von chkstk.asm:</p>
<pre><code class="language-cpp">; Find next lower page and probe
cs20:
        sub     eax, _PAGESIZE_         ; decrease by PAGESIZE
        test    dword ptr [eax],eax     ; probe page. // &lt;- Das ist Zeile 99
        jmp     short cs10
</code></pre>
<p><strong>Versteht das jemand?<br />
Und wie könnte man diese Problem vermeiden / umgehen?</strong></p>
<p>Ich jedenfalls kann mir bis jetzt zwei Workarounds vorstellen:</p>
<p>1. Workaround:<br />
Vektor statt 2D-Array.<br />
Vorteil: Programm funktioniert, Größe flexibel<br />
Nachteile:<br />
- Der Vektor der Größe [2000*2000] beanprucht laut Taskmanager aber deutlich mehr RAM als das [2000][2000] Array.<br />
- Mini-Umrechungsfunktion von 2D-Koordinaten nach 1D-Vektor Position nötig. Schluckt bestimmt ein bisschen Zeit....</p>
<p>2. Workaround:<br />
Folgendes konnte ich noch nicht ausprobieren, aber mir vorstellen:<br />
[2000][2000] Array als globale Variable und einen Zeiger als Membervariable darauf.<br />
Bloß:<br />
Funktioniert das? und:<br />
Wie greift man per Zeiger auf ein 2D-Array zu? Bei einem 1D-Array ist mir das klar, aber bei einem 2D....?</p>
<p><strong>Wie bewertet Ihr die Workarounds? Gibt es sonstige Alternativen (falls ein Workaround überhaupt notwendig ist...)</strong></p>
<p>Danke und Gruß!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1094622</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1094622</guid><dc:creator><![CDATA[dong]]></dc:creator><pubDate>Sun, 09 Jul 2006 19:10:38 GMT</pubDate></item><item><title><![CDATA[Reply to Was begrenzt die Größe eines Arrays als Membervariable? on Sun, 09 Jul 2006 19:37:00 GMT]]></title><description><![CDATA[<p>Stacküberlauf!<br />
Mein Vorschlag Heap-Speicher verwenden z.B.</p>
<pre><code class="language-cpp">typedef float(*myPtr)[2000];

   myPtr g_fwert = new float [2000][2000];

   myPtr[1000][80] = 47.11;
</code></pre>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1094639</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1094639</guid><dc:creator><![CDATA[haase]]></dc:creator><pubDate>Sun, 09 Jul 2006 19:37:00 GMT</pubDate></item><item><title><![CDATA[Reply to Was begrenzt die Größe eines Arrays als Membervariable? on Sun, 09 Jul 2006 19:45:49 GMT]]></title><description><![CDATA[<p>sorry so ists richtig</p>
<pre><code class="language-cpp">typedef float(*myPtr)[2000]; 

   myPtr g_fwert = new float [2000][2000]; 

   g_fwert[1000][80] = 47.11;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1094644</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1094644</guid><dc:creator><![CDATA[haase]]></dc:creator><pubDate>Sun, 09 Jul 2006 19:45:49 GMT</pubDate></item><item><title><![CDATA[Reply to Was begrenzt die Größe eines Arrays als Membervariable? on Sun, 09 Jul 2006 20:06:13 GMT]]></title><description><![CDATA[<p>Danke, damit gibt es zumindest keinen Absturz.<br />
Den Zugriff muss ich noch ausprobieren...<br />
(...das Programm legt allerdings bei der Erstellung dieses Arrays eine ganz schöne Verschnaufpause ein... ;))</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1094651</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1094651</guid><dc:creator><![CDATA[dong]]></dc:creator><pubDate>Sun, 09 Jul 2006 20:06:13 GMT</pubDate></item><item><title><![CDATA[Reply to Was begrenzt die Größe eines Arrays als Membervariable? on Sun, 09 Jul 2006 20:29:55 GMT]]></title><description><![CDATA[<p>Super, Zugriff klappt auch!<br />
Danke!!! <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>
<p>Was ich noch nicht so ganz verstehe ist die typedef Zeile.</p>
<p>Mein Verständnis:<br />
Ohne dieses <em>(sondern stattdessen eben nur float als Typ)</em> könnte man nur ein 1-Dimensionales Array mit new erzeugen, stimmt das?</p>
<p>Danke und Gruß!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1094664</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1094664</guid><dc:creator><![CDATA[dong]]></dc:creator><pubDate>Sun, 09 Jul 2006 20:29:55 GMT</pubDate></item><item><title><![CDATA[Reply to Was begrenzt die Größe eines Arrays als Membervariable? on Sun, 09 Jul 2006 21:16:34 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Nein ein typedef hat keinerlei semantische Auswirkungen, sondern ist nur ein Alias zum Masieren/Vereinfachen von komplexen Typen. Der Compiler ersetzt dann alle typedefs wieder durch die Originale.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1094687</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1094687</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Sun, 09 Jul 2006 21:16:34 GMT</pubDate></item></channel></rss>