<?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[simples memcpy]]></title><description><![CDATA[<p>Hi,</p>
<p>Ich bin gerade dabei ein simples memcpy selber zu programmieren, aber irgendwie<br />
funktioniert es nicht.<br />
Ich denke es hat etwas damit zu tun, dass ich auf Speicher zugreife obwohl ich es nicht darf, aber ich weiß nich wo.</p>
<pre><code class="language-cpp">typedef unsigned long long ui64; //64 Bit unsigned integer

ui64 ui64GetSize(char *cpChars)
{
        if(cpChars==NULL)
            return (0);
        else
        {
            ui64 ui64Size=0;

            for(;cpChars[ui64Size]!='\0';ui64Size++)
            {
                ;//Do Nothing
            }

            return (ui64Size+1);
        }
}

//GetSize funktioniert einwandfrei

void vCopyChars(char *cpSource,char *cpDestination)
{
    if(cpSource==NULL) //gucken ob cpSource überhaupt auf etwas zeigt
        return;
    else
    {
        ui64 ui64SourceSize=ui64GetSize(cpSource);//Länge von cpSource

        cpDestination=new char[ui64SourceSize];//cpDestination auf die größe einstellen

        for(ui64 ui64Ticks=0;ui64Ticks&lt;ui64SourceSize;ui64Ticks++)
        {
            cpDestination[ui64Ticks]=cpSource[ui64Ticks];//cpDestination füllen
        }

    }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/152883/simples-memcpy</link><generator>RSS for Node</generator><lastBuildDate>Mon, 07 Sep 2026 04:31:27 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/152883.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 10 Jul 2006 19:05:22 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to simples memcpy on Mon, 10 Jul 2006 19:05:22 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>Ich bin gerade dabei ein simples memcpy selber zu programmieren, aber irgendwie<br />
funktioniert es nicht.<br />
Ich denke es hat etwas damit zu tun, dass ich auf Speicher zugreife obwohl ich es nicht darf, aber ich weiß nich wo.</p>
<pre><code class="language-cpp">typedef unsigned long long ui64; //64 Bit unsigned integer

ui64 ui64GetSize(char *cpChars)
{
        if(cpChars==NULL)
            return (0);
        else
        {
            ui64 ui64Size=0;

            for(;cpChars[ui64Size]!='\0';ui64Size++)
            {
                ;//Do Nothing
            }

            return (ui64Size+1);
        }
}

//GetSize funktioniert einwandfrei

void vCopyChars(char *cpSource,char *cpDestination)
{
    if(cpSource==NULL) //gucken ob cpSource überhaupt auf etwas zeigt
        return;
    else
    {
        ui64 ui64SourceSize=ui64GetSize(cpSource);//Länge von cpSource

        cpDestination=new char[ui64SourceSize];//cpDestination auf die größe einstellen

        for(ui64 ui64Ticks=0;ui64Ticks&lt;ui64SourceSize;ui64Ticks++)
        {
            cpDestination[ui64Ticks]=cpSource[ui64Ticks];//cpDestination füllen
        }

    }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1095379</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1095379</guid><dc:creator><![CDATA[gnrtu]]></dc:creator><pubDate>Mon, 10 Jul 2006 19:05:22 GMT</pubDate></item><item><title><![CDATA[Reply to simples memcpy on Mon, 10 Jul 2006 19:58:39 GMT]]></title><description><![CDATA[<p>gnrtu schrieb:</p>
<blockquote>
<pre><code class="language-cpp">cpDestination=new char[ui64SourceSize];//cpDestination auf die größe einstellen
</code></pre>
</blockquote>
<p>wozu soll das gut sein?</p>
<p>sinnvoller als ein 64bit typ vor, dürfte hier außerdem die verwendung von std::size_t sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1095414</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1095414</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Mon, 10 Jul 2006 19:58:39 GMT</pubDate></item><item><title><![CDATA[Reply to simples memcpy on Mon, 10 Jul 2006 20:35:37 GMT]]></title><description><![CDATA[<p>Mhhhh joa, aber das ist doch ef egal oder?</p>
<p>Außerdem finde ich wens es 64 Bit integers gibt sollte man se auch benutzen und nicht nur 32 Bit.</p>
<p><a href="http://tigcc.ticalc.org/doc/stddef.html#size_t" rel="nofollow">http://tigcc.ticalc.org/doc/stddef.html#size_t</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1095438</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1095438</guid><dc:creator><![CDATA[gnrtu]]></dc:creator><pubDate>Mon, 10 Jul 2006 20:35:37 GMT</pubDate></item><item><title><![CDATA[Reply to simples memcpy on Mon, 10 Jul 2006 21:04:39 GMT]]></title><description><![CDATA[<p>gnrtu schrieb:</p>
<blockquote>
<p>Mhhhh joa, aber das ist doch ef egal oder?</p>
<p>Außerdem finde ich wens es 64 Bit integers gibt sollte man se auch benutzen und nicht nur 32 Bit.</p>
<p><a href="http://tigcc.ticalc.org/doc/stddef.html#size_t" rel="nofollow">http://tigcc.ticalc.org/doc/stddef.html#size_t</a></p>
</blockquote>
<p>Du solltest eigentlich nie mehr als size_t an speicher resevieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1095462</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1095462</guid><dc:creator><![CDATA[joomoo]]></dc:creator><pubDate>Mon, 10 Jul 2006 21:04:39 GMT</pubDate></item><item><title><![CDATA[Reply to simples memcpy on Mon, 10 Jul 2006 21:19:52 GMT]]></title><description><![CDATA[<p>Warum?</p>
<p>is das net eg off topic?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1095472</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1095472</guid><dc:creator><![CDATA[gnrtu]]></dc:creator><pubDate>Mon, 10 Jul 2006 21:19:52 GMT</pubDate></item><item><title><![CDATA[Reply to simples memcpy on Mon, 10 Jul 2006 22:58:10 GMT]]></title><description><![CDATA[<p>gnrtu schrieb:</p>
<blockquote>
<p>Ich bin gerade dabei ein simples memcpy selber zu programmieren</p>
</blockquote>
<p>Das was du programmiert hast, ist eher strcpy. memcpy interessiert der Inhalt der Quelle überhaupt nicht. Dh, du kannst dir die ui64GetSize Funktion vollkommen sparen, die nützt dir nix. Damit die Länge bekannt ist, hat memcpy einen weiteren Parameter. Der fehlt deiner vCopyChars Funktion. Und memcpy reserviert intern auch keinen Speicher, das überlässt du mal besser dem Client. Wenn der angibt, dass er n Chars kopieren will, dann hat er auch dafür zu sorgen, dass der Zielbereich mindestens n Chars gross ist.</p>
<p>btw:<br />
Nichts für ungut, aber versuche deinen Stil zu vereinfachen. Von deinem Code bekomme ich leichte Kopfschmerzen. Dieses ganze ui64... Zeug ist recht unleserlich, und zudem der falsche Datentyp. Für Speichergrössen gibt es size_t. Dann kannst du, wenn du denn unbedingt UN verwenden willst, einfach n... schreiben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1095506</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1095506</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Mon, 10 Jul 2006 22:58:10 GMT</pubDate></item><item><title><![CDATA[Reply to simples memcpy on Tue, 11 Jul 2006 13:06:24 GMT]]></title><description><![CDATA[<p>gnrtu schrieb:</p>
<blockquote>
<p>Warum?</p>
</blockquote>
<p>mehr als 2 gb hat erstens fast keiner, und zweitens musst du bedenken, dass ein 32 bit system auch nur 4 gb haben kann (ich glaub sogar praktisch auch nur 2gb). selbst wenn jemand 4 gb hat, heißt das nicht das das betriebsystem einem programm alles zurverfügung stellt.</p>
<p>Und auf einem 64bit system ist ein long auch 8 byte groß, oder?</p>
<p>mfg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1095796</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1095796</guid><dc:creator><![CDATA[joomoo]]></dc:creator><pubDate>Tue, 11 Jul 2006 13:06:24 GMT</pubDate></item><item><title><![CDATA[Reply to simples memcpy on Tue, 11 Jul 2006 13:25:51 GMT]]></title><description><![CDATA[<p>std::size_t hat eine &quot;geeignete&quot; Größe. Auf einem 64-Bit-System sollte das dann 64 Bit sein. Auf einem 32-Bit-System 32 Bit, also immer so groß wie nötig.</p>
<p>Aber nun zu deinem eigentlichen Problem. Du reservierst Speicher und merkst Dir die Adresse in der Variablen cpDestination. Am Ende der Funktion wird die Variable verworfen. Du hast einen Memoryleak. Wahrscheinlich wolltest Du den Pointer als Referenz übergeben. Besser wäre, ihn einfach als Rückgabewert zurück zu liefern.</p>
<p>Ausserdem kann man die Standardfunktionen, wie strlen und strcpy doch verwenden, wenn es die schon gibt.</p>
<pre><code class="language-cpp">char* vCopyChars(char *cpSource)
{
    if(cpSource==0) //gucken ob cpSource überhaupt auf etwas zeigt
        return 0;

    std::size_t s = std::strlen(cpSource);

    char *cpDestination=new char[s];//cpDestination auf die Größe einstellen
    std::strcpy(cpDestination, cpSource);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1095816</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1095816</guid><dc:creator><![CDATA[tntnet]]></dc:creator><pubDate>Tue, 11 Jul 2006 13:25:51 GMT</pubDate></item><item><title><![CDATA[Reply to simples memcpy on Wed, 12 Jul 2006 13:49:10 GMT]]></title><description><![CDATA[<p>joomoo schrieb:</p>
<blockquote>
<p>Und auf einem 64bit system ist ein long auch 8 byte groß, oder?</p>
</blockquote>
<p>Das kommt ganz darauf an, welches Datenmodell verwendet wird. Unter Win64 ist long zB weiterhin 32 Bit, da LLP64 verwendet wird. Streng genommen gibt es also unter Windows keinen 64 Bit C++ Datentyp, da nur long long 64 Bit breit ist, dies aber kein C++ Datentyp ist. Ein weiterer Grund size_t zu verwenden, denn da kümmert sich die Implementation schon drum, dass grössentechnisch alles passt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1096477</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1096477</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Wed, 12 Jul 2006 13:49:10 GMT</pubDate></item><item><title><![CDATA[Reply to simples memcpy on Wed, 12 Jul 2006 16:33:47 GMT]]></title><description><![CDATA[<p>ok, ihr habt mich überzeugt <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>Aber mal ne andere Frage?</p>
<p>Wenn man speicher in einer Funktion anfordert, wird er dann am Ende der Funktion wieder freigegeben?</p>
<p>Bsp:</p>
<pre><code class="language-cpp">char *p1,*p2;

void p2mem(char *p)
{
    p=new char[6];
}

p1=&quot;Hallo&quot;;

strcpy(p2,p1);
</code></pre>
<p>Hier kommt ein fehler, dass man unberechtigt auf Speicher zugreift.</p>
<pre><code class="language-cpp">char *p1,*p2;

p1=&quot;Hallo&quot;;

p2=new char[6];

strcpy(p2,p1);
</code></pre>
<p>Jetzt klappt alles.</p>
<p>Daraus würde ich schließen, dass reservierter Speicher am Ende des Blockes wieder freigegeben wird, aber man verändert ja eine Variable von außerhalb über Zeiger.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1096598</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1096598</guid><dc:creator><![CDATA[gnrtu]]></dc:creator><pubDate>Wed, 12 Jul 2006 16:33:47 GMT</pubDate></item><item><title><![CDATA[Reply to simples memcpy on Wed, 12 Jul 2006 16:41:53 GMT]]></title><description><![CDATA[<p>gnrtu schrieb:</p>
<blockquote>
<p>ok, ihr habt mich überzeugt <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>Aber mal ne andere Frage?</p>
<p>Wenn man speicher in einer Funktion anfordert, wird er dann am Ende der Funktion wieder freigegeben?</p>
</blockquote>
<p>Nein.</p>
<blockquote>
<p>Bsp:</p>
<pre><code class="language-cpp">char *p1,*p2;

void p2mem(char *p)
{
    p=new char[6];
}

p1=&quot;Hallo&quot;;

strcpy(p2,p1);
</code></pre>
<p>Hier kommt ein fehler, dass man unberechtigt auf Speicher zugreift.</p>
</blockquote>
<p>Das liegt daran, dass du nur die Variable p änderst, die ja nur in p2men() gültig ist. Die Variable p2 wird nicht geändert. Dies lässt sich mit ner referenz lösen:</p>
<pre><code class="language-cpp">void p2mem(char*&amp; p); // ich glaub etwa so, bin nicht ganz sicher
</code></pre>
<p>mfg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1096607</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1096607</guid><dc:creator><![CDATA[joomoo]]></dc:creator><pubDate>Wed, 12 Jul 2006 16:41:53 GMT</pubDate></item><item><title><![CDATA[Reply to simples memcpy on Wed, 12 Jul 2006 16:48:15 GMT]]></title><description><![CDATA[<p>Ahhhhh....<br />
Es funktioniert mit **.</p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1096610</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1096610</guid><dc:creator><![CDATA[gnrtu]]></dc:creator><pubDate>Wed, 12 Jul 2006 16:48:15 GMT</pubDate></item><item><title><![CDATA[Reply to simples memcpy on Wed, 12 Jul 2006 17:51:20 GMT]]></title><description><![CDATA[<p>Das ist dann aber ein Doppelzeiger und nicht die in C++ üblicherweise genutzte Referenz <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="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1096650</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1096650</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Wed, 12 Jul 2006 17:51:20 GMT</pubDate></item><item><title><![CDATA[Reply to simples memcpy on Wed, 12 Jul 2006 21:55:09 GMT]]></title><description><![CDATA[<p>Refernzen mag ich net <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="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1096770</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1096770</guid><dc:creator><![CDATA[gnrtu]]></dc:creator><pubDate>Wed, 12 Jul 2006 21:55:09 GMT</pubDate></item></channel></rss>