<?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[Problem mit memcpy]]></title><description><![CDATA[<p>Hallo, ich habe ein Problem mit der Funktion memcpy. In meinem Programm habe ich 2 Arrays. Das erste Array ist kleiner als das Zweite (hat also weniger Elemente). Daher möchte ich beide Arrays gleich lang machen.<br />
In Folgendem Beispiel ist Array1: 1 2 3 4 5 6 7 . Nach dem &quot;gleichlang machen&quot; mit Array2 soll Array1 so aussehen: 0 0 0 1 2 3 4 5 6 7 .<br />
Mein Programm:</p>
<pre><code class="language-cpp">size_t laenge=7;                     // Länge von Array1
size_t laenge_arr2=10;               // Länge von Array2
short *arr1 = new short [laenge];    // Array1 erstellen

for(unsigned int t(0);t!=laenge;++t) // Array1 mit Werten füllen
    arr1[t]=t+1;                     // Array1: 1 2 3 4 5 6 7

short *pointer = new short[laenge];  // Ein Array erstellen, dass so lang ist wie Array1

memcpy(pointer,arr1,laenge);         // Array1 in das neu Erstellte kopieren
//HIER IST DER FEHLER

//die Werte in pointer lauten: 1 2 3 4 17999 20575 20306

//--------- Folgender Code eher unwichtig ------------

delete [] arr1;                      // Array1 löschen

size_t a(laenge_arr2-laenge);        // Die Stelle merken, bis zu der vorne mit Nullen aufgefüllt wird

laenge=laenge_arr2;                  // Länge von Array1 vergrößern zur Länge von Array2

arr1=new short[laenge];              // Array1 jetzt mit so vielen Elementen erstellen, wie Array2 hat

for(size_t t(0);t!=a;++t)            // Die ersten paar Stellen mit Nullen auffüllen
    arr1[t]=0;

memcpy(arr1+a,pointer,laenge-a); // Ab der Stelle, wo keine nullen mehr aufgefüllt werden
                                 //das Hilfsarray zurück in Array1 kopieren
//Wert von Array1 jetzt: 0 0 0 1 2 3 4 24912 26740 17213

delete [] pointer; //Hilfsarray löschen
</code></pre>
<p>Die falschen Werte im Array sehen schwer nach Werten aus, die zufällig im Arbeitsspeicher rumschwirren. Allerdings sehe ich nicht die Stelle, wo ich die bereiche meiner Arrays überschreite <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /><br />
Kann mir jemand helfen?</p>
<p>P.S.: Ja, ich will das ganze wirklich mit arrays lösen, also bitte nicht &quot;Nimm doch vector&quot; schreien <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>
]]></description><link>https://www.c-plusplus.net/forum/topic/239540/problem-mit-memcpy</link><generator>RSS for Node</generator><lastBuildDate>Tue, 22 Sep 2026 12:20:46 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/239540.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 24 Apr 2009 16:41:48 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit memcpy on Fri, 24 Apr 2009 16:41:48 GMT]]></title><description><![CDATA[<p>Hallo, ich habe ein Problem mit der Funktion memcpy. In meinem Programm habe ich 2 Arrays. Das erste Array ist kleiner als das Zweite (hat also weniger Elemente). Daher möchte ich beide Arrays gleich lang machen.<br />
In Folgendem Beispiel ist Array1: 1 2 3 4 5 6 7 . Nach dem &quot;gleichlang machen&quot; mit Array2 soll Array1 so aussehen: 0 0 0 1 2 3 4 5 6 7 .<br />
Mein Programm:</p>
<pre><code class="language-cpp">size_t laenge=7;                     // Länge von Array1
size_t laenge_arr2=10;               // Länge von Array2
short *arr1 = new short [laenge];    // Array1 erstellen

for(unsigned int t(0);t!=laenge;++t) // Array1 mit Werten füllen
    arr1[t]=t+1;                     // Array1: 1 2 3 4 5 6 7

short *pointer = new short[laenge];  // Ein Array erstellen, dass so lang ist wie Array1

memcpy(pointer,arr1,laenge);         // Array1 in das neu Erstellte kopieren
//HIER IST DER FEHLER

//die Werte in pointer lauten: 1 2 3 4 17999 20575 20306

//--------- Folgender Code eher unwichtig ------------

delete [] arr1;                      // Array1 löschen

size_t a(laenge_arr2-laenge);        // Die Stelle merken, bis zu der vorne mit Nullen aufgefüllt wird

laenge=laenge_arr2;                  // Länge von Array1 vergrößern zur Länge von Array2

arr1=new short[laenge];              // Array1 jetzt mit so vielen Elementen erstellen, wie Array2 hat

for(size_t t(0);t!=a;++t)            // Die ersten paar Stellen mit Nullen auffüllen
    arr1[t]=0;

memcpy(arr1+a,pointer,laenge-a); // Ab der Stelle, wo keine nullen mehr aufgefüllt werden
                                 //das Hilfsarray zurück in Array1 kopieren
//Wert von Array1 jetzt: 0 0 0 1 2 3 4 24912 26740 17213

delete [] pointer; //Hilfsarray löschen
</code></pre>
<p>Die falschen Werte im Array sehen schwer nach Werten aus, die zufällig im Arbeitsspeicher rumschwirren. Allerdings sehe ich nicht die Stelle, wo ich die bereiche meiner Arrays überschreite <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /><br />
Kann mir jemand helfen?</p>
<p>P.S.: Ja, ich will das ganze wirklich mit arrays lösen, also bitte nicht &quot;Nimm doch vector&quot; schreien <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1700825</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1700825</guid><dc:creator><![CDATA[memcpy]]></dc:creator><pubDate>Fri, 24 Apr 2009 16:41:48 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit memcpy on Fri, 24 Apr 2009 16:53:30 GMT]]></title><description><![CDATA[<p>memcpy(pointer,arr1,laenge);</p>
<p>Ich denke hier ist der Fehler... die Größe ist möglicherweise Falsch! Versuche mal statt<br />
memcpy(pointer,arr1,laenge);<br />
jetzt<br />
memcpy(pointer,arr1,sizeof(short[laenge]));</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1700830</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1700830</guid><dc:creator><![CDATA[TLEP]]></dc:creator><pubDate>Fri, 24 Apr 2009 16:53:30 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit memcpy on Fri, 24 Apr 2009 17:00:33 GMT]]></title><description><![CDATA[<p>Ja, mit sizeof(short[laenge]) gehts einwandfrei. Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1700836</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1700836</guid><dc:creator><![CDATA[memcpy]]></dc:creator><pubDate>Fri, 24 Apr 2009 17:00:33 GMT</pubDate></item></channel></rss>