<?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[Zwei verschieden dimensionale Arrays mit denselben Adressen]]></title><description><![CDATA[<p>Hi,<br />
Ich bastele gerade an nem Sudoku-Spiel und habe dazu das Spielfeld in ein dynamisches 9*3*3 Array geschrieben.</p>
<p>Um die Korrektheit der Spalten/Zeilen zu überprüfen ist es aber sinnvoller ein 9*9 Array zu haben.</p>
<p>Meine Versuche habe letztlich zu dem geführt:</p>
<pre><code>sudoku::sudoku()
{
    int n=0;
    int p=0;
    int q=0;

    m_Feld = new int **[9];
    for (int i=0; i&lt;9; i++)
    {
        m_Feld[i]=new int*[3];
        for (int j=0; j&lt;3; j++)
        {
            m_Feld[i][j]=new int[3];
            for (int k=0; k&lt;3; k++)
            {
                m_Feld[i][j][k]=0;
            }
        }
    }

    m_Feld2 = new int**[9];
    for (int i=0; i &lt;9; i++)
        m_Feld2[i]=new int*[9];

while (n&lt;9)
{
    for (int i=0; i&lt;3; i++)
    {
        for (int j=n; j&lt;n+3;j++)
        {
            for (int k=0; k&lt;3; k++)
            {
                m_Feld2[p][q]=&amp;m_Feld[j][i][k];
                q++;
                if(q==8)
                {
                    q=0;
                    p++;
                }
            }
        }
    }
    n+=3;
}

}
</code></pre>
<p>Das produziert allerdings nen Programmabsturz.</p>
<p>Bin immernoch sehr am zweifeln, ob ich die Frage überhaupt posten soll, weil es eigentlich so ne billige Sache ist, aber ich komme da irgendwie nicht weiter. Sieht jemand den Fehler?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/278289/zwei-verschieden-dimensionale-arrays-mit-denselben-adressen</link><generator>RSS for Node</generator><lastBuildDate>Tue, 25 Aug 2026 08:31:47 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/278289.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 03 Dec 2010 13:03:51 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zwei verschieden dimensionale Arrays mit denselben Adressen on Fri, 03 Dec 2010 13:03:51 GMT]]></title><description><![CDATA[<p>Hi,<br />
Ich bastele gerade an nem Sudoku-Spiel und habe dazu das Spielfeld in ein dynamisches 9*3*3 Array geschrieben.</p>
<p>Um die Korrektheit der Spalten/Zeilen zu überprüfen ist es aber sinnvoller ein 9*9 Array zu haben.</p>
<p>Meine Versuche habe letztlich zu dem geführt:</p>
<pre><code>sudoku::sudoku()
{
    int n=0;
    int p=0;
    int q=0;

    m_Feld = new int **[9];
    for (int i=0; i&lt;9; i++)
    {
        m_Feld[i]=new int*[3];
        for (int j=0; j&lt;3; j++)
        {
            m_Feld[i][j]=new int[3];
            for (int k=0; k&lt;3; k++)
            {
                m_Feld[i][j][k]=0;
            }
        }
    }

    m_Feld2 = new int**[9];
    for (int i=0; i &lt;9; i++)
        m_Feld2[i]=new int*[9];

while (n&lt;9)
{
    for (int i=0; i&lt;3; i++)
    {
        for (int j=n; j&lt;n+3;j++)
        {
            for (int k=0; k&lt;3; k++)
            {
                m_Feld2[p][q]=&amp;m_Feld[j][i][k];
                q++;
                if(q==8)
                {
                    q=0;
                    p++;
                }
            }
        }
    }
    n+=3;
}

}
</code></pre>
<p>Das produziert allerdings nen Programmabsturz.</p>
<p>Bin immernoch sehr am zweifeln, ob ich die Frage überhaupt posten soll, weil es eigentlich so ne billige Sache ist, aber ich komme da irgendwie nicht weiter. Sieht jemand den Fehler?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1989516</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1989516</guid><dc:creator><![CDATA[Ronschk]]></dc:creator><pubDate>Fri, 03 Dec 2010 13:03:51 GMT</pubDate></item><item><title><![CDATA[Reply to Zwei verschieden dimensionale Arrays mit denselben Adressen on Fri, 03 Dec 2010 13:13:27 GMT]]></title><description><![CDATA[<p>Dein Code ist ein ziemliches Gefrickel. Nicht nur, dass ich ebenfalls nicht verstehe, warum 9*3*3, sondern auch der geteilte Speicher mit</p>
<pre><code class="language-cpp">m_Feld2[p][q]=&amp;m_Feld[j][i][k];
</code></pre>
<p>ist äusserst anfällig, besonders beim Freigeben.</p>
<p>Warum nimmst du nicht <strong>ein</strong> Feld mit 9*9, also 81 Elementen? Die Indizes kannst du dann abbilden über eine Funktion <code>int At(unsigned int x, unsigned int y)</code> .</p>
<p>Viel einfacher wäre es natürlich, gleich fertige Container wie <code>std::vector</code> oder <code>boost::multi_array</code> zu nehmen. Aber wenn du auf <code>new[]</code> beharrst, verwende auch <code>delete[]</code> zur Freigabe und kapsle das Ganze ordentlich, sodass man es ohne Zeigerverbiegungen benutzen kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1989522</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1989522</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 03 Dec 2010 13:13:27 GMT</pubDate></item><item><title><![CDATA[Reply to Zwei verschieden dimensionale Arrays mit denselben Adressen on Fri, 03 Dec 2010 13:22:22 GMT]]></title><description><![CDATA[<p>Mal eine Idee für den Feldzugriff:</p>
<pre><code class="language-cpp">std::vector&lt;int&gt; feld(9*9);

/*
sub - linke obere Ecke des Quadrates 0,0 ... 3,3 ... 6,6
x,y - Position im Quadrat 0,0 ... 1,1 ... 2,2

wenn sub == 0,0 kann ueber das gesamte Feld iteriert werden x,y --&gt; 0,0 ... 8,8
*/
int zahl(size_t subx, size_t suby, size_t x, size_t y)
{
    return feld.at((suby + y) * 9 + (subx +x));
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1989527</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1989527</guid><dc:creator><![CDATA[Nick Unbekannt]]></dc:creator><pubDate>Fri, 03 Dec 2010 13:22:22 GMT</pubDate></item></channel></rss>