<?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 bei Kopiervorgang in ein 2D Arrays]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich hantiere gerade (auch zur Übung) mit 2D Arrays herum. Dass ich keine std::vector benutze ist beabsichtigt. Ich möchte nun den kompletten Inhalt eines Arrays in ein anderes kopieren. Irgendwie wird dieser Kopiervorgang aber nicht außerhalb der Kopiermethode sichtbar:</p>
<pre><code>//Methode kopiert private 2D Array num2convert in cp_pointer
void myclass::cp_num2pointer(unsigned short** cp_pointer) {
  cp_pointer = new unsigned short*[length+1];
  for(int i = 0; i &lt;= length; i++) {
    cp_pointer[i] = new unsigned short[2];
    cp_pointer[i][0] = num2convert[i][0];
    cp_pointer[i][1] = num2convert[i][1];
    std::cout &lt;&lt; cp_pointer[i][0]; //kein Problem!
  }
}

//in der Aufrufermethode:
  unsigned short** curr_arr, nx_level_arr;

  cp_num2pointer(curr_arr);

  for(int i = 0; i &lt; length; i++) //ein Element weniger ausgeben
     std::cout &lt;&lt; curr_arr[i][0]; //Segmentation Fault
</code></pre>
<p>Warum ist der Kopiervorgang in der Fehlerzeile anscheinend ohne Wirkung geblieben?</p>
<p>Könnt ihr mir helfen?<br />
Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/317652/segmentation-fault-bei-kopiervorgang-in-ein-2d-arrays</link><generator>RSS for Node</generator><lastBuildDate>Tue, 28 Jul 2026 14:20:14 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/317652.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 16 Jun 2013 10:33:52 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Segmentation Fault bei Kopiervorgang in ein 2D Arrays on Sun, 16 Jun 2013 10:34:11 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich hantiere gerade (auch zur Übung) mit 2D Arrays herum. Dass ich keine std::vector benutze ist beabsichtigt. Ich möchte nun den kompletten Inhalt eines Arrays in ein anderes kopieren. Irgendwie wird dieser Kopiervorgang aber nicht außerhalb der Kopiermethode sichtbar:</p>
<pre><code>//Methode kopiert private 2D Array num2convert in cp_pointer
void myclass::cp_num2pointer(unsigned short** cp_pointer) {
  cp_pointer = new unsigned short*[length+1];
  for(int i = 0; i &lt;= length; i++) {
    cp_pointer[i] = new unsigned short[2];
    cp_pointer[i][0] = num2convert[i][0];
    cp_pointer[i][1] = num2convert[i][1];
    std::cout &lt;&lt; cp_pointer[i][0]; //kein Problem!
  }
}

//in der Aufrufermethode:
  unsigned short** curr_arr, nx_level_arr;

  cp_num2pointer(curr_arr);

  for(int i = 0; i &lt; length; i++) //ein Element weniger ausgeben
     std::cout &lt;&lt; curr_arr[i][0]; //Segmentation Fault
</code></pre>
<p>Warum ist der Kopiervorgang in der Fehlerzeile anscheinend ohne Wirkung geblieben?</p>
<p>Könnt ihr mir helfen?<br />
Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2331484</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2331484</guid><dc:creator><![CDATA[freakC++]]></dc:creator><pubDate>Sun, 16 Jun 2013 10:34:11 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation Fault bei Kopiervorgang in ein 2D Arrays on Sun, 16 Jun 2013 10:36:32 GMT]]></title><description><![CDATA[<p>Wegen Call-by-Value.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2331485</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2331485</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Sun, 16 Jun 2013 10:36:32 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation Fault bei Kopiervorgang in ein 2D Arrays on Sun, 16 Jun 2013 10:43:46 GMT]]></title><description><![CDATA[<p>Daran hatte ich auch gedacht, aber ich übergebe doch einen Zeiger?!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2331487</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2331487</guid><dc:creator><![CDATA[freakC++]]></dc:creator><pubDate>Sun, 16 Jun 2013 10:43:46 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation Fault bei Kopiervorgang in ein 2D Arrays on Sun, 16 Jun 2013 10:48:46 GMT]]></title><description><![CDATA[<p>Ok, du hattest Recht. Ich hab nun einfach eine Referenz übergeben. Die Methodensignatur sieht jetzt so aus:</p>
<pre><code>void myclass::cp_num2pointer(unsigned short**&amp; cp_pointer)
</code></pre>
<p>Nur aus Interesse. Wie sähe der Code aus, wenn ich eine Pointer übergeben wollte? Mit einem unsigned short*** hat es bei mir nicht geklappt.</p>
<p>Vielen Dank<br />
LG, freakC++</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2331490</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2331490</guid><dc:creator><![CDATA[freakC++]]></dc:creator><pubDate>Sun, 16 Jun 2013 10:48:46 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation Fault bei Kopiervorgang in ein 2D Arrays on Sun, 16 Jun 2013 11:10:40 GMT]]></title><description><![CDATA[<p>freakC++ schrieb:</p>
<blockquote>
<p>Daran hatte ich auch gedacht, aber ich übergebe doch einen Zeiger?!</p>
</blockquote>
<p>Es kommt nicht drauf an, dass du irgendeinen Zeiger übergibst. Wenn du willst, dass sich außerhalb der Funktion etwas ändert, musst du einen Zeiger auf das, was sich ändern soll, übergeben (oder halt eine Referenz).</p>
<blockquote>
<p>Wie sähe der Code aus, wenn ich eine Pointer übergeben wollte?</p>
</blockquote>
<pre><code class="language-cpp">//Methode kopiert private 2D Array num2convert in cp_pointer
void myclass::cp_num2pointer(unsigned short*** cp_pointer) {
  *cp_pointer = new unsigned short*[length+1];
  for(int i = 0; i &lt;= length; i++) {
    (*cp_pointer)[i] = new unsigned short[2];
    (*cp_pointer)[i][0] = num2convert[i][0];
    (*cp_pointer)[i][1] = num2convert[i][1];
    std::cout &lt;&lt; (*cp_pointer)[i][0]; //kein Problem!
  }
}

//in der Aufrufermethode:
  unsigned short** curr_arr, nx_level_arr;

  cp_num2pointer(&amp;curr_arr);

  for(int i = 0; i &lt; length; i++) //ein Element weniger ausgeben
     std::cout &lt;&lt; curr_arr[i][0]; //Segmentation Fault
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2331497</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2331497</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Sun, 16 Jun 2013 11:10:40 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation Fault bei Kopiervorgang in ein 2D Arrays on Sun, 16 Jun 2013 11:12:06 GMT]]></title><description><![CDATA[<p>ah...die Klammern hatten bei mir gefehlt <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>
<p>Danke<br />
lg, freakC++</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2331499</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2331499</guid><dc:creator><![CDATA[freakC++]]></dc:creator><pubDate>Sun, 16 Jun 2013 11:12:06 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation Fault bei Kopiervorgang in ein 2D Arrays on Sun, 16 Jun 2013 11:20:28 GMT]]></title><description><![CDATA[<p>Da die innere Dimension bekannt ist:</p>
<pre><code class="language-cpp">int (*myclass::cp_num2pointer())[2] {
  int (*cp_pointer[2]) = new unsigned short[length + 1][2];
  for(int i = 0; i &lt;= length; ++i) {
    cp_pointer[i][0] = num2convert[i][0];
    cp_pointer[i][1] = num2convert[i][1];
    std::cout &lt;&lt; cp_pointer[i][0]; //kein Problem!
  }

  return cp_pointer;
}

...

int (*curr_arr)[2] = cp_num2pointer();
</code></pre>
<p>Bzw.</p>
<pre><code class="language-cpp">typedef int two_numbers[2];

two_numbers *myclass::cp_num2pointer() {
  two_numbers *cp_pointer = new two_numbers[length + 1];
  // usw.
}

two_numbers *curr_arr = cp_num2pointer();
</code></pre>
<p>Allerdings wäre es vermutlich sinnvoller, statt nackter Zeiger</p>
<pre><code class="language-cpp">std::vector&lt;std::array&lt;int, 2&gt;&gt; myclass::cp_num2pointer() {
  std::vector&lt;std::array&lt;int, 2&gt;&gt; cp(length + 1);

  for(int i = 0; i &lt;= length; ++i) {
    cp[i][0] = num2convert[i][0];
    cp[i][1] = num2convert[i][1];
    std::cout &lt;&lt; cp[i][0]; //kein Problem!
  }

  return cp;
}
</code></pre>
<p>zu schreiben; dann musst du dich um die Aufräumarbeit hinterher nicht mehr kümmern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2331504</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2331504</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Sun, 16 Jun 2013 11:20:28 GMT</pubDate></item></channel></rss>